首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >了解速度并实现Boids算法?

了解速度并实现Boids算法?
EN

Stack Overflow用户
提问于 2012-10-21 21:59:01
回答 2查看 1.3K关注 0票数 3

因此,我正在努力将Boids移植到Brightscript,基于伪码

我试图理解所涉及的数据结构,例如,速度是一个单一值,还是一个3D值?(即velocity={x,y,z})

似乎伪码似乎混淆了这一点,有时它有一个包含向量和单值项的等式:

代码语言:javascript
复制
v1 = rule1(b)
v2 = rule2(b)
v3 = rule3(b)

b.velocity = b.velocity + v1 + v2 + v3

如果速度是一个三方值,那么这将是有意义的,但我不确定。

因此,我的第一个问题是:基于上面的伪代码,这是单个boid的正确数据结构吗?

代码语言:javascript
复制
boid={position:{px:0,py:0,pz:0},velocity:{x:0,y:0,z:0},vector:{x:0,y:0,z:0},pc:{x:0,y:0,z:0},pv:{x:0,y:0,z:0})

其中pc=感知中心,pv=感知速度。

我实现了一个vector_addvector_subvector_div和向量布尔函数。

我之所以从这个伪代码开始,是因为我找不到其他可读的东西,但它仍然给我留下了很多问题,因为数据结构没有为每个变量显式地定义。

(编辑)这里是我所说的一个很好的例子:

代码语言:javascript
复制
IF |b.position - bJ.position| < 100 THEN

如果b.position - b[j].position都是三维坐标,那么除非它们是< {100,100,100},否则它们如何被视为“小于100”?

EN

回答 2

Stack Overflow用户

发布于 2012-10-21 22:38:19

速度

如果您查看他们的伪码的矢量加法和减法,它们将显式地在三维向量上执行这些操作。

代码语言:javascript
复制
PROCEDURE Vector_Add(Vector v1, Vector v2)
    Vector v
    v.x = v1.x + v2.x
    v.y = v1.y + v2.y
    v.z = v1.z + v2.z
    RETURN v
END PROCEDURE

在辅助职能一节中,它还指出:

..。上述伪码中的所有加减都是向量运算。

因此,我们可以假设b.velocity = b.velocity + v1 + v2 + v3 + ...是三维向量的矢量加法。

矢量震级

这两个向量的减法称为向量之间的差,并产生一个新的向量。在你的例子中,让diffB = b.position - bJ.position

现在,|b.position - bJ.position|相当于|diffB|,它取的是差分向量diffB的大小,而不是“单个值”(称为标量)的绝对值。震级也称为矢量长度,或称范数。

可能令人困惑的是,向量的大小用与绝对值相同的符号来表示。所以diffB是一个差分向量,而|diffB|是这个向量的大小。用v定义了欧氏空间中向量|v| = sqrt(x1^2 + ... + xn^2)的幅值。

所以,对于你的三维矢量diffB

代码语言:javascript
复制
|diffB| = sqrt(x1^2 + x2^2 + x3^2) = sqrt(x^2 + y^2 + z^2)

由于平方根的结果是一个标量,所以它可以很好地满足< 100

所以是的,我相信速度是一个三维向量velocity = {x1, x2, x3},虽然我还没有彻底地检查博德伪码,你的数据结构似乎是正确的。

票数 3
EN

Stack Overflow用户

发布于 2012-10-21 22:29:44

这句话的意思是:

代码语言:javascript
复制
|b.position - bJ.position|

实际上是两个向量之差的标量。

这个标量是一个值,因此可以是< 100。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13002603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档