Боиды в питоне; Расчет расстояния между двумя боями

Я пытаюсь запрограммировать поведение птиц в полете с помощью boids в Python. Я еще не нашел много, но в настоящее время я застрял в функции, определяющей расстояние между двумя boids. Он должен быть рассчитан по формуле (a,b) = sqrt( (a_x - b_x)^2 + (a_y - b_y)^2)) где a и b - два вектора, между которыми я должен вычислить расстояние, a_x и b_x являются x-компонентами векторов, a_y и b_y являются y-компонентами. Я получаю ошибку об показателях в формуле. Я пытался решить несколько способов, но я просто не могу понять, как это сделать...

Вот что у меня так далеко. Я очень новичок в программировании, поэтому я знаю только основы, и я не уверен, что все остальное, что у меня есть, в порядке.;

WIDTH = 1000            # WIDTH OF SCREEN IN PIXELS
HEIGHT = 500            # HEIGHT OF SCREEN IN PIXELS
BOIDS = 20              # NUMBER OF BOIDS IN SIMULATION
SPEED_LIMIT = 500       # FOR BOID VELOCITY
BOID_EYESIGHT = 50      # HOW FAR A BOID CAN LOOK
WALL = 50               # FROM SIDE IN PIXELS
WALL_FORCE = 100        # ACCELERATION PER MOVE


from math import sqrt
import random
X = 0
Y = 1
VX = 2
VY = 3

def calculate_distance(a,b):
    a = []
    b = []
    for x in range (len(a)):
        for y in range (len(b)):
            distance = sqrt((a[X] - b[X])**2 + (a[Y] - b[Y])**2)
            return distance


boids = []

for i in range(BOIDS):
    b_pos_x = random.uniform(0,WIDTH)
    b_pos_y = random.uniform(0,HEIGHT)
    b_vel_x = random.uniform(-100,100)
    b_vel_y = random.uniform(-100,100)
    b = [b_pos_x, b_pos_y, b_vel_x, b_vel_y]

    boids.append(b)

    for element_1 in range(len(boids)):
        for element_2 in range(len(boids)):
            distance = calculate_distance(element_1,element_2)

1 ответ

Проблемы:

  • Вы не передаете данные boid в вашу функцию, только индексы element_1 а также element_2, Так calculate_distance ничего не знает о боидах.
  • Даже если вы передаете данные boid, вы назначаете пустые списки a а также b, что означает, что внутри вашего цикла никогда не выполняется.

Вы хотите что-то вроде:

for element_1 in range(len(boids)):
    for element_2 in range(len(boids)):
        distance = calculate_distance(boids[element_1],boids[element_2])

а потом

def calculate_distance(a,b):
    return sqrt((a[0] - b[0])**2 + (a[1] - b[1])**2)
Другие вопросы по тегам