我是编程新手,我正在尝试在 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
由于一个 boid 没有特权或任何东西,因此任何两个 boid 都应该以相同的力量相互排斥。然而,当我用 2 个相隔 10 个单位且没有初始速度的 boid 进行测试时,一个 boid 的加速明显快于另一个。我将误差追溯到距离变量,boids 用来计算排斥强度,我让两个 boids 都打印了这个变量。在第一个时间帧上,一个 boid 将另一个 boid 视为 10 个单位,而另一个将其视为 11 个单位(实际上,它是 -11,但由于它是平方的,所以符号无关紧要)。然后我打印出它们的位置并减去它们以在第一帧时间手动计算它们的距离值,看看它是否与距离方程有关,它产生了正确的值 10 和 -10。我'