计算两个点之间的距离(如果<1:添加到列表x和y坐标(填充程序)Python

我有两个列表,positions_rabbits_x(具有所有x坐标)和positions_rabbits_y(具有所有y坐标)。我的程序运行200秒后,我的“兔子”正在重现,但是当我调用此函数时,我的程序崩溃了。 (它不会显示错误,只是过载,因为它在我的计算机上添加了太多“兔子”,因此它不再响应了。)非常感谢!!

def reproducing_rabbits():
    global positions_rabbits_x,positions_rabbits_y
    global rabbits_angles


    angle = 2 * math.pi * random.random()
    index = 0

    for rabx in range(len(positions_rabbits_x)-1,-1,-1):
        for rabx2 in range(len(positions_rabbits_y)):    
            distance = math.sqrt((positions_rabbits_x[rabx] - positions_rabbits_x[rabx2])**2 + (positions_rabbits_y[rabx] - positions_rabbits_y[rabx2])**2) 
            if distance < 1:
                index += 1
                if index == 1:
                    positions_rabbits_x.append(random.randint(1,100))
                    positions_rabbits_y.append(random.randint(1,100))
                    rabbits_angles.append(angle)
                    index = 0
                else:
                    pass
    return




hbxflihua 回答:计算两个点之间的距离(如果<1:添加到列表x和y坐标(填充程序)Python

在注释中进行建议的更改后,代码将运行。

from math import pi
from random import random,randint

def reproducing_rabbits(positions_rabbits_x,positions_rabbits_y):

    angle = 2 * pi * random()
    rabbits_angles = []

    index = 0

    for rabx in range(len(positions_rabbits_x)-1,-1,-1):
        for rabx2 in range(len(positions_rabbits_x)):  
            # change or to and since it seems this should be based upon
            # Manhattan distance (meaning if rabbit positions in x and y
            # are within 1
            if positions_rabbits_x[rabx] - positions_rabbits_x[rabx2] < 1 and positions_rabbits_y[rabx] - positions_rabbits_y[rabx2] < 1:
                index += 1
                if index == 1:
                    positions_rabbits_x.append(randint(1,100))
                    positions_rabbits_y.append(randint(1,100))
                    rabbits_angles.append(angle)
                    index = 0
                else:
                    index= 0
                    continue

    return positions_rabbits_x,positions_rabbits_y,rabbits_angles

测试

positions_rabbits_x = list(range(4))
positions_rabbits_y = list(range(4))

positions_rabbits_x,rabbits_angles = reproducing_rabbits(positions_rabbits_x,positions_rabbits_y)
print(f'Positions x {positions_rabbits_x}')
print(f'Positions y {positions_rabbits_y}')
print(f'Rabbits Angles {rabbits_angles}')

输出

Positions x [0,1,2,3,67,73,29,69,99,7,11,55,18,49,81,36,79,82,87,16,62,91,15,27,47,22]
Positions y [0,24,85,9,19,46,34,56,25,84,86,71,14,68,13,83,17,90,4,41,26,20]
Rabbits Angles [6.142160513085789,6.142160513085789,6.142160513085789]
,

我建议您更改兔子坐标上的迭代方式。

我在循环中也删除了很多多余的代码。不需要index

def reproducing_rabbits(rabbits_x,rabbits_y,rabbits_angles):

    for n,(x1,y1) in enumerate(zip(rabbits_x,rabbits_y)):
        for m,(x2,y2) in enumerate(zip(rabbits_x,rabbits_y)):  
            if math.sqrt((x1-x2)**2 + (y1-y2)**2) < 1 and n != m: # No self-reproduction.
                rabbits_x.append(randint(1,100))
                rabbits_y.append(randint(1,100))
                rabbits_angles.append(2*pi*random())

    return rabbits_x,rabbits_angles
本文链接:https://www.f2er.com/2607691.html

大家都在问