class Avion:
def __init__(self, position, vitesse, direction):
self.position = np.array(position, dtype=float)
self.vitesse = vitesse
self.direction = np.array(direction, dtype=float)
self.trajectoire = [self.position.copy()]
self.actif = True
def deplacement(self):
if self.actif:
self.position = self.position + self.direction * self.vitesse
self.trajectoire.append(self.position.copy())
NB_ITER = 100
TAILLE = 50
SEUIL_COLLISION = 5
avions = [Avion(
position=[random.uniform(10, TAILLE-10), random.uniform(10, TAILLE-10)],
vitesse=random.uniform(1, 3),
direction=[random.uniform(-1, 1), random.uniform(-1, 1)]
) for _ in range(3)]
for i in range(NB_ITER):
for avion in avions:
avion.deplacement()
d12 = np.linalg.norm(avions[0].position - avions[1].position)
d23 = np.linalg.norm(avions[1].position - avions[2].position)
d13 = np.linalg.norm(avions[0].position - avions[2].position)
if avions[0].actif and avions[1].actif and d12 < SEUIL_COLLISION:
print(f"Collision entre avion 1 et 2 à l'étape {i}")
avions[0].actif = avions[1].actif = False
if avions[1].actif and avions[2].actif and d23 < SEUIL_COLLISION:
print(f"Collision entre avion 2 et 3 à l'étape {i}")
avions[1].actif = avions[2].actif = False
if avions[0].actif and avions[2].actif and d13 < SEUIL_COLLISION:
print(f"Collision entre avion 1 et 3 à l'étape {i}")
avions[0].actif = avions[2].actif = False
plt.figure(figsize=(12, 12))
couleurs = ['b', 'g', 'orange']
for i, avion in enumerate(avions):
trajectoire = np.array(avion.trajectoire)
plt.plot(trajectoire[:, 0], trajectoire[:, 1], color=couleurs[i], label=f"Avion {i+1}")
plt.scatter(trajectoire[0, 0], trajectoire[0, 1], color=couleurs[i], marker='o', label=f"Départ {i+1}")
plt.scatter(trajectoire[-1, 0], trajectoire[-1, 1], color=couleurs[i], marker='x', label=f"Arrivée {i+1}")
plt.title("Trajectoires des avions")
plt.xlabel("X")
plt.ylabel("Y")
plt.xlim(0, TAILLE)
plt.ylim(0, TAILLE)
plt.legend()
plt.grid(True)
plt.show()
Trajectoire des avions avec collision (arrêt de l'avion 1 et 2) :
Trajectoire des avions sans collision :
avion1 = Avion(
position=[random.uniform(10, TAILLE-10), random.uniform(10, TAILLE-10), random.uniform(10, TAILLE-10)],
vitesse=random.uniform(1, 3),
direction=[random.uniform(-1, 1), random.uniform(-1, 1), random.uniform(-1, 1)]
)
Trajectoire des avions dans un espace 3D :