Boids en python; calcular la distancia entre dos boids

Estoy tratando de progtwigr el comportamiento de las aves en vuelo con boids en Python. Todavía no he encontrado mucho, pero actualmente estoy atascado en la función que define la distancia entre dos boids. Debe calcularse con la fórmula (a, b) = sqrt ((a_x – b_x) ^ 2 + (a_y – b_y) ^ 2)) donde a y b son los dos vectores entre los cuales tengo que calcular la distancia, a_x y b_x son los componentes x de los vectores y a_y y b_y son los componentes y. Me sale un error sobre los índices en la fórmula. He intentado resolver de varias maneras, pero no puedo encontrar la manera de hacerlo …

Esto es lo que tengo hasta ahora. Soy muy nuevo en la progtwigción, así que solo conozco los conceptos básicos y no estoy seguro de que el rest de lo que tengo esté bien;

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) 

Los problemas son:

  • No está pasando ningún dato boid a su función, solo los índices element_1 y element_2 . Así que calcula_distancia no sabe nada acerca de los boids.
  • Incluso si estaba pasando datos de boid, está asignando listas vacías a y b , lo que significa que el interior de su bucle nunca se ejecuta.

Quieres algo como:

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

y entonces

 def calculate_distance(a,b): return sqrt((a[0] - b[0])**2 + (a[1] - b[1])**2)