Initial release
This commit is contained in:
59
SW II Course dans le champ d'astéroïdes.py
Normal file
59
SW II Course dans le champ d'astéroïdes.py
Normal file
@@ -0,0 +1,59 @@
|
||||
from math import sqrt
|
||||
|
||||
asteroides = open("ChampsAsteroides.txt").read()
|
||||
|
||||
input = """688.84, 515.91, -158.86
|
||||
-482.17, 22.55, -190.13
|
||||
567.6, -393.37, -46.81
|
||||
166.76, 816.23, 9.37
|
||||
-436.32, 511.61, 236.74
|
||||
-498.99, 819.49, 965.57
|
||||
620.43, 804.33, -379.7
|
||||
459.66, 797.68, 367.97
|
||||
-55.71, -798.6, -131.66
|
||||
221.77, 826.02, 933.21"""
|
||||
|
||||
def distance(trajet, objet):
|
||||
point_a = trajet[0]
|
||||
point_b = trajet[1]
|
||||
x_a = point_a[0]
|
||||
y_a = point_a[1]
|
||||
z_a = point_a[2]
|
||||
x_b = point_b[0]
|
||||
y_b = point_b[1]
|
||||
z_b = point_b[2]
|
||||
x_o = objet[0]
|
||||
y_o = objet[1]
|
||||
z_o = objet[2]
|
||||
delta_x = x_b - x_a
|
||||
delta_y = y_b - y_a
|
||||
delta_z = z_b - z_a
|
||||
d_min = 999999
|
||||
iter = 1000
|
||||
for i in range(iter):
|
||||
x = x_a + i*delta_x/iter
|
||||
y = y_a + i*delta_y/iter
|
||||
z = z_a + i*delta_z/iter
|
||||
d = sqrt((x_o-x)**2 + (y_o-y)**2 + (z_o - z)**2)
|
||||
d_min = min(d_min, d)
|
||||
return d_min
|
||||
|
||||
asteroides = [v.replace(":", ",").replace(" ", "") for v in asteroides.splitlines()]
|
||||
asteroides = [v.split(",") for v in asteroides]
|
||||
asteroides = {v[0]:[(float(v[1]), float(v[2]), float(v[3])), 999999] for v in asteroides}
|
||||
|
||||
trajet = list()
|
||||
input = input.splitlines()
|
||||
for i in range(len(input)-1):
|
||||
point_a = tuple(float(v) for v in input[i].replace(" ", "").split(","))
|
||||
point_b = tuple(float(v) for v in input[i+1].replace(" ", "").split(","))
|
||||
trajet.append(((point_a[0], point_a[1], point_a[2]), (point_b[0], point_b[1], point_b[2])))
|
||||
|
||||
for t in trajet:
|
||||
for a in asteroides:
|
||||
asteroides[a][1] = min(asteroides[a][1], distance(t, asteroides[a][0]))
|
||||
|
||||
|
||||
solution = [k for k, v in sorted(asteroides.items(), key=lambda item: item[1][1])]
|
||||
for i in range(9):
|
||||
print('"'+solution[i]+'"', end=", ")
|
||||
Reference in New Issue
Block a user