体的逆平方分离不均匀地排斥体



我是编程新手,我正在尝试用python编写一个小boids算法,到目前为止,我已经编写了一个方法来保持boids彼此分开使用平方反比函数,它看起来像这样:

def separation(self, boids):
repulsion = Vector(0, 0)
magnitude = 0
for Boid in boids:
if Boid != self:
distance = Boid.position - self.position
if np.linalg.norm(distance) < 100:
magnitude = 100/(np.linalg.norm(distance) ** 2)
direction = math.atan2(distance.y, distance.x)
repulsion = repulsion - Vector(magnitude * cos(direction), magnitude * sin(direction))
return repulsion

由于一个物体没有特权或任何东西,任何两个物体应该以相同的力相互排斥。然而,当我在两个物体之间间隔10个单位且没有初始速度的情况下进行测试时,其中一个物体的加速速度明显快于另一个。我追踪误差到距离变量,这个变量是机器人用来计算斥力强度的,我让两个机器人都打印了这个变量。在第一坐标系中,一个看到另一个有10个单位的距离,而另一个看到11个单位的距离(实际上是-11,但因为它是平方的,符号就不重要了)。然后,我打印出它们的位置,并减去它们,以手动计算它们在第一帧时间内的距离值,看看它是否与距离方程有关,它产生了10和-10,正确的值。我试着把距离变量重写为self。距离,然后写自我。距离=距离。距离使两个物体看到彼此之间的距离相同,但这并没有什么区别。

每次更新一个id。有些生物在其他生物有机会移动之前就看到了它们。这意味着他们从来没有像对方看到他们那样近距离地看到对方。这就是不对称的根源。

问题在于何时将分离调用的结果应用于物体的位置。

你需要同时更新所有的位置。也就是说,你需要在根据排斥力更新位置之前完成所有的分离调用。


这样想我有两个变量

a = 1
b = 1

我想把它们相加。如果我这样做:

a += b
b += a

我:

a == 2
b == 3

这不是我想要的

我希望它们都是2

如果我这样做:

(a, b) = (a + b, b + a)

我得到了我想要的。

这个花哨的表达隐藏了一个真理。

a_ = a + b
b_ = b + a
a = a_
b = b_

相关内容

  • 没有找到相关文章

最新更新