有效地计算多个 pygame 对象之间的距离
efficiently calculate distance between multiple pygame objects
我有一个 pygame 程序,我想检查是否有任何兔子足够接近交配。在这样做时,我必须使用两个 for 循环,其中我使用两点公式之间的距离来计算距离。这个过程消耗了我的许多计算机资源并导致游戏性能急剧下降。
检查每只兔子之间距离的最有效方法是什么?
def mating(rabbits):
for i in range(len(rabbits)):
for x in range(len(rabbits)):
if math.sqrt(math.pow((rabbits[i].xpos - rabbits[x].xpos),2) + math.pow((rabbits[i].ypos - rabbits[x].ypos),2)) <= 20:
#add a new rabbit
rabbits.append(rabbit())
在你的算法中,math.sqrt
消耗了大部分时间。计算平方根是非常昂贵的。比较距离的平方而不是距离,这样就不用计算平方根了。
您还计算了两次从一只兔子到另一只兔子的距离。请注意,您甚至可以计算兔子与自身的距离(当 i
等于 x
时)。此距离始终为 0。外层循环必须经过所有兔子。然而,内循环只需要遍历列表中的后续兔子(rabbits[i+1:]
)。
def mating(rabbits):
for i, rabbit1 in enumerate(rabbits):
for rabbit2 in rabbits[i+1:]:
dx = rabbit1.xpos - rabbit2.xpos
dy = rabbit1.ypos - rabbit2.ypos
if dx*dx+dy*dy <= 20*20:
#add a new rabbit
rabbits.append(rabbit())
我有一个 pygame 程序,我想检查是否有任何兔子足够接近交配。在这样做时,我必须使用两个 for 循环,其中我使用两点公式之间的距离来计算距离。这个过程消耗了我的许多计算机资源并导致游戏性能急剧下降。
检查每只兔子之间距离的最有效方法是什么?
def mating(rabbits):
for i in range(len(rabbits)):
for x in range(len(rabbits)):
if math.sqrt(math.pow((rabbits[i].xpos - rabbits[x].xpos),2) + math.pow((rabbits[i].ypos - rabbits[x].ypos),2)) <= 20:
#add a new rabbit
rabbits.append(rabbit())
在你的算法中,math.sqrt
消耗了大部分时间。计算平方根是非常昂贵的。比较距离的平方而不是距离,这样就不用计算平方根了。
您还计算了两次从一只兔子到另一只兔子的距离。请注意,您甚至可以计算兔子与自身的距离(当 i
等于 x
时)。此距离始终为 0。外层循环必须经过所有兔子。然而,内循环只需要遍历列表中的后续兔子(rabbits[i+1:]
)。
def mating(rabbits):
for i, rabbit1 in enumerate(rabbits):
for rabbit2 in rabbits[i+1:]:
dx = rabbit1.xpos - rabbit2.xpos
dy = rabbit1.ypos - rabbit2.ypos
if dx*dx+dy*dy <= 20*20:
#add a new rabbit
rabbits.append(rabbit())