ok j'avais oublié un fichier
This commit is contained in:
parent
22b6844cf4
commit
21e1d2a10c
193
3/TP3_voisin.py
Executable file
193
3/TP3_voisin.py
Executable file
@ -0,0 +1,193 @@
|
||||
#!/usr/bin/env python3
|
||||
import sys, os
|
||||
import matplotlib.pyplot as plt
|
||||
from random import random, choice
|
||||
import numpy as np
|
||||
from time import sleep
|
||||
import argparse
|
||||
|
||||
"""
|
||||
MNI TP3 - 27 janvier 2020
|
||||
Dylan Voisin - M1 Informatique Luminy
|
||||
Franck Palacios - M1 Informatique Luminy
|
||||
|
||||
Notes:
|
||||
- u1 et u2 ne semblent pas orthogonaux, ceci est dû à la non utilisation
|
||||
d'une échelle 1:1 pour l'affichage des points
|
||||
- u1 et u2 ne sont pas proportionnels par rapport à lambda mais à la
|
||||
distance entre le barycentre et le point le plus éloigné selon la
|
||||
composante x ou y
|
||||
- u1 est orienté «vers la droite» et u2 «vers le haut» dans ce programme
|
||||
"""
|
||||
|
||||
|
||||
def acquérir_depuis_fichier(filename):
|
||||
# l_pts = []
|
||||
# with open(filename) as f:
|
||||
# for line in f:
|
||||
# split = line.split()
|
||||
# if len(split) == 2:
|
||||
# l_pts.append(list(map(float, split)))
|
||||
# return np.array(l_pts)
|
||||
return np.loadtxt(filename)
|
||||
|
||||
def calc_barycentre(l_pts):
|
||||
x = sum(l_pts[:,0]) / len(l_pts)
|
||||
y = sum(l_pts[:,1]) / len(l_pts)
|
||||
return x, y
|
||||
|
||||
def centrer_points(l_pts, barycentre):
|
||||
return l_pts - barycentre
|
||||
|
||||
def calc_matrice_corrélation(l_pts):
|
||||
c_pts = centrer_points(l_pts, calc_barycentre(l_pts))
|
||||
A = np.array([
|
||||
[sum(pt[0] ** 2 for pt in c_pts), sum(pt[0] * pt[1] for pt in c_pts)],
|
||||
[sum(pt[0] * pt[1] for pt in c_pts), sum(pt[1] ** 2 for pt in c_pts)]
|
||||
])
|
||||
return A
|
||||
|
||||
def diagonaliser_matrice22(m):
|
||||
a, b, c, d = m[0][0], m[0][1], m[1][0], m[1][1]
|
||||
discr = (-d - a) ** 2 - 4 * (a * d - b**2)
|
||||
lambda1 = ((d + a) + discr ** .5) / 2
|
||||
lambda2 = ((d + a) - discr ** .5) / 2
|
||||
if lambda1 != 0:
|
||||
if a - lambda1 != 0 and b != 0:
|
||||
u1 = np.array([-b, (a-lambda1)])
|
||||
u1 *= -1 if b > 0 else 1
|
||||
else:
|
||||
u1 = np.array([lambda1, 0])
|
||||
u2 = np.array([-u1[1], u1[0]])
|
||||
else:
|
||||
if a - lambda2 != 0 and b != 0:
|
||||
u2 = np.array([-b, (a-lambda2)])
|
||||
u2 *= -1 if b < 0 else 1
|
||||
else:
|
||||
u2 = np.array([lambda2, 0])
|
||||
u1 = np.array([u2[1], -u2[0]])
|
||||
return u1, u2, lambda1, lambda2
|
||||
|
||||
def get_info_affichage(l_pts):
|
||||
"""renvoie les vecteurs u1 et u2 pour l'affichage ainsi que xmin, xmax, ymin, ymax"""
|
||||
bary = calc_barycentre(l_pts)
|
||||
u1, u2 = diagonaliser_matrice22(calc_matrice_corrélation(l_pts))[:2]
|
||||
dist = min(max(l_pts[:,0]) - bary[0], max(l_pts[:,1]) - bary[1])
|
||||
dist_x = max(l_pts[:,0]) - min(l_pts[:,0])
|
||||
dist_y = max(l_pts[:,1]) - min(l_pts[:,1])
|
||||
x_range = min(l_pts[:,0]) - 0.1 * dist_x, max(l_pts[:,0]) + 0.1 * dist_x
|
||||
y_range = min(l_pts[:,1]) - 0.1 * dist_y, max(l_pts[:,1]) + 0.1 * dist_y
|
||||
u1 = u1 / np.linalg.norm(u1) * dist
|
||||
u2 = u2 / np.linalg.norm(u2) * 1/2 * dist
|
||||
return u1, u2, x_range, y_range, dist
|
||||
|
||||
|
||||
def visualiser_nuage(l_pts):
|
||||
bary = calc_barycentre(l_pts)
|
||||
u1, u2 = diagonaliser_matrice22(calc_matrice_corrélation(l_pts))[:2]
|
||||
dist = min(max(l_pts[:,0]) - bary[0], max(l_pts[:,1]) - bary[1])
|
||||
u1 = u1 / np.linalg.norm(u1) * dist
|
||||
u2 = u2 / np.linalg.norm(u2) * 1/2 * dist
|
||||
ax = plt.axes()
|
||||
# plot du nuage
|
||||
plt.scatter(l_pts[:,0], l_pts[:,1])
|
||||
ax.arrow(*bary, *u1, head_length=0.1*dist, head_width=0.1*dist, ec="black", fc="white")
|
||||
ax.arrow(*bary, *u2, head_length=0.1*dist, head_width=0.1*dist, ec="black", fc="white")
|
||||
# ax.set_aspect('equal')
|
||||
plt.show()
|
||||
|
||||
def animation_nuage(l_pts, loops=10, time_sleep=2, delta_bruit=3):
|
||||
plt.ion()
|
||||
fig = plt.figure()
|
||||
ax = fig.add_subplot(111)
|
||||
fig.canvas.draw()
|
||||
# nuage courant (pas de do while en Python)
|
||||
bary = calc_barycentre(l_pts)
|
||||
u1, u2, x_range, y_range, dist = get_info_affichage(l_pts)
|
||||
sc = ax.scatter(l_pts[:,0], l_pts[:,1])
|
||||
arr1 = ax.arrow(*bary, *u1, head_length=0.1*dist, head_width=0.1*dist, ec="black", fc="white")
|
||||
arr2 = ax.arrow(*bary, *u2, head_length=0.1*dist, head_width=0.1*dist, ec="black", fc="white")
|
||||
plt.title("itération 0")
|
||||
fig.canvas.flush_events()
|
||||
fig.canvas.draw()
|
||||
fig.canvas.flush_events()
|
||||
sleep(time_sleep) # attente avant animation suivante
|
||||
for i in range(loops):
|
||||
plt.title("itération " + str(i+1))
|
||||
# aléa
|
||||
ran = np.random.random(l_pts.shape) * 2 * delta_bruit - delta_bruit
|
||||
l_pts += ran
|
||||
# recalcul des données
|
||||
bary = calc_barycentre(l_pts)
|
||||
u1, u2, x_range, y_range, dist = get_info_affichage(l_pts)
|
||||
ax.set_xlim(*x_range)
|
||||
ax.set_ylim(*y_range)
|
||||
# plot
|
||||
sc.set_offsets(l_pts) # repositionnement des points
|
||||
arr1.remove() # on enlève les vecteurs
|
||||
arr2.remove()
|
||||
arr1 = ax.arrow(*bary, *u1, head_length=0.1*dist, head_width=0.1*dist, ec="black", fc="white")
|
||||
arr2 = ax.arrow(*bary, *u2, head_length=0.1*dist, head_width=0.1*dist, ec="black", fc="white")
|
||||
fig.canvas.flush_events()
|
||||
fig.canvas.draw() # on redessine
|
||||
fig.canvas.flush_events()
|
||||
sleep(time_sleep) # attente avant animation suivante
|
||||
|
||||
|
||||
def main(argv):
|
||||
parser = argparse.ArgumentParser()
|
||||
gps = parser.add_mutually_exclusive_group(required=True)
|
||||
parser.add_argument("-i", "--input",
|
||||
help="input file for dots - if none, generate dots")
|
||||
gps.add_argument("-s", "--show", action="store_true",
|
||||
help="show cloud of dots with u1 and u2")
|
||||
gps.add_argument("-l", "--loop", type=int, default=10,
|
||||
help="number of loop to show/perform on randomized dots from originals ones")
|
||||
parser.add_argument("-d", "--delay", type=float, default=2,
|
||||
help="amount of time between each loop")
|
||||
parser.add_argument("-n", "--noise", type = float, default=10,
|
||||
help="maximum value of the noise applied between each step")
|
||||
if not argv:
|
||||
parser.print_usage()
|
||||
sys.exit(0)
|
||||
args = parser.parse_args(argv)
|
||||
if args.input:
|
||||
if not os.path.isfile(args.input):
|
||||
print("File", args.input, "not found.", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
else:
|
||||
l_pts = acquérir_depuis_fichier(args.input)
|
||||
else:
|
||||
l_pts = []
|
||||
n = 500 # nombre de points
|
||||
f = lambda x: x/2 + 3 # fonction génératrice de la ditribution
|
||||
delta_bruit = 10 # bruit généré, 0 si on en veut aucun
|
||||
for i in range(n):
|
||||
y = f(i) + choice((-1, 1)) * random() * delta_bruit/2
|
||||
l_pts.append([i, y])
|
||||
l_pts = np.array(l_pts)
|
||||
if args.show:
|
||||
visualiser_nuage(l_pts)
|
||||
elif args.loop:
|
||||
animation_nuage(l_pts, args.loop, args.delay, args.noise)
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
# if len(sys.argv) == 2:
|
||||
# l_pts = acquérir_depuis_fichier(sys.argv[1])
|
||||
# else:
|
||||
# l_pts = []
|
||||
# n = 500 # nombre de points
|
||||
# f = lambda x: x/2 + 3 # fonction génératrice de la ditribution
|
||||
# delta_bruit = 10 # bruit généré, 0 si on en veut aucun
|
||||
# for i in range(n):
|
||||
# y = f(i) + choice((-1, 1)) * random() * delta_bruit/2
|
||||
# l_pts.append([i, y])
|
||||
# l_pts = np.array(l_pts)
|
||||
# # np.savetxt("pts.txt", l_pts, "%f")
|
||||
# u1, u2 = diagonaliser_matrice22(calc_matrice_corrélation(l_pts))[:2]
|
||||
# # print(f"{u1/np.linalg.norm(u1)=}\n{u2/np.linalg.norm(u2)=}")
|
||||
# visualiser_nuage(l_pts)
|
||||
# animation_nuage(l_pts, 20, delta_bruit=100)
|
||||
main(sys.argv[1:])
|
BIN
3/__pycache__/argparse.cpython-38.pyc
Normal file
BIN
3/__pycache__/argparse.cpython-38.pyc
Normal file
Binary file not shown.
18
3/argtest.py
Executable file
18
3/argtest.py
Executable file
@ -0,0 +1,18 @@
|
||||
#!/usr/bin/env python3
|
||||
import argparse
|
||||
import sys
|
||||
if __name__ == '__main__':
|
||||
parser = argparse.ArgumentParser()
|
||||
gps = parser.add_mutually_exclusive_group(required=True)
|
||||
parser.add_argument("-i", "--input",
|
||||
help="input file for dots - if none, generate dots")
|
||||
gps.add_argument("-s", "--show", action="store_true",
|
||||
help="show cloud of dots with u1 and u2")
|
||||
gps.add_argument("-l", "--loop", type=int,
|
||||
help="number of loop to show/perform on randomized dots from originals ones")
|
||||
parser.add_argument("-d", "--delay", type=float,
|
||||
help="amount of time between each loop")
|
||||
parser.add_argument("-n", "--noise", type = float,
|
||||
help="maximum value of the noise applied between each step")
|
||||
# parser.print_usage()
|
||||
args = parser.parse_args(sys.argv[1:])
|
500
3/pts.txt
Normal file
500
3/pts.txt
Normal file
@ -0,0 +1,500 @@
|
||||
0.000000 -0.023186
|
||||
1.000000 5.857825
|
||||
2.000000 3.275455
|
||||
3.000000 3.401954
|
||||
4.000000 8.635886
|
||||
5.000000 10.377725
|
||||
6.000000 7.556466
|
||||
7.000000 10.770253
|
||||
8.000000 7.524395
|
||||
9.000000 5.171486
|
||||
10.000000 8.546169
|
||||
11.000000 12.289386
|
||||
12.000000 13.900921
|
||||
13.000000 7.927590
|
||||
14.000000 9.845790
|
||||
15.000000 7.187358
|
||||
16.000000 9.253599
|
||||
17.000000 12.145586
|
||||
18.000000 13.537859
|
||||
19.000000 12.393378
|
||||
20.000000 13.145255
|
||||
21.000000 17.496613
|
||||
22.000000 17.940572
|
||||
23.000000 11.101478
|
||||
24.000000 19.047264
|
||||
25.000000 11.185974
|
||||
26.000000 15.039941
|
||||
27.000000 21.059292
|
||||
28.000000 19.136668
|
||||
29.000000 22.281619
|
||||
30.000000 19.810588
|
||||
31.000000 15.961196
|
||||
32.000000 15.521450
|
||||
33.000000 22.426298
|
||||
34.000000 23.347813
|
||||
35.000000 16.800230
|
||||
36.000000 20.916651
|
||||
37.000000 26.095866
|
||||
38.000000 20.932527
|
||||
39.000000 19.815266
|
||||
40.000000 19.746754
|
||||
41.000000 19.190824
|
||||
42.000000 28.586348
|
||||
43.000000 21.292743
|
||||
44.000000 26.050123
|
||||
45.000000 26.939175
|
||||
46.000000 28.266101
|
||||
47.000000 27.055208
|
||||
48.000000 28.494551
|
||||
49.000000 28.805590
|
||||
50.000000 30.667429
|
||||
51.000000 31.778983
|
||||
52.000000 27.385029
|
||||
53.000000 31.090957
|
||||
54.000000 25.837646
|
||||
55.000000 27.512875
|
||||
56.000000 27.284538
|
||||
57.000000 28.027620
|
||||
58.000000 33.654044
|
||||
59.000000 37.117874
|
||||
60.000000 37.573314
|
||||
61.000000 38.294268
|
||||
62.000000 38.636872
|
||||
63.000000 30.152789
|
||||
64.000000 39.979247
|
||||
65.000000 33.321116
|
||||
66.000000 38.087786
|
||||
67.000000 38.494769
|
||||
68.000000 40.620081
|
||||
69.000000 34.428033
|
||||
70.000000 42.203396
|
||||
71.000000 40.970667
|
||||
72.000000 43.442315
|
||||
73.000000 43.870836
|
||||
74.000000 44.377727
|
||||
75.000000 37.162640
|
||||
76.000000 36.647850
|
||||
77.000000 43.537719
|
||||
78.000000 37.877693
|
||||
79.000000 44.043660
|
||||
80.000000 46.546596
|
||||
81.000000 43.304593
|
||||
82.000000 42.963059
|
||||
83.000000 42.108888
|
||||
84.000000 43.919368
|
||||
85.000000 46.041826
|
||||
86.000000 50.902350
|
||||
87.000000 45.677434
|
||||
88.000000 49.690260
|
||||
89.000000 47.792927
|
||||
90.000000 49.775464
|
||||
91.000000 52.192190
|
||||
92.000000 52.490735
|
||||
93.000000 48.090169
|
||||
94.000000 46.980611
|
||||
95.000000 53.643081
|
||||
96.000000 52.401143
|
||||
97.000000 56.300351
|
||||
98.000000 55.682241
|
||||
99.000000 55.569692
|
||||
100.000000 54.116217
|
||||
101.000000 53.499871
|
||||
102.000000 51.147650
|
||||
103.000000 56.830054
|
||||
104.000000 53.411645
|
||||
105.000000 57.874685
|
||||
106.000000 57.007126
|
||||
107.000000 59.778208
|
||||
108.000000 53.925589
|
||||
109.000000 59.952021
|
||||
110.000000 62.508451
|
||||
111.000000 57.788687
|
||||
112.000000 62.375443
|
||||
113.000000 58.311711
|
||||
114.000000 58.121713
|
||||
115.000000 59.810022
|
||||
116.000000 61.746637
|
||||
117.000000 65.825080
|
||||
118.000000 63.333089
|
||||
119.000000 58.763863
|
||||
120.000000 67.109977
|
||||
121.000000 64.998450
|
||||
122.000000 67.688598
|
||||
123.000000 64.986981
|
||||
124.000000 63.008893
|
||||
125.000000 69.070582
|
||||
126.000000 65.717463
|
||||
127.000000 70.299678
|
||||
128.000000 64.840769
|
||||
129.000000 68.343514
|
||||
130.000000 72.704847
|
||||
131.000000 70.048405
|
||||
132.000000 73.786231
|
||||
133.000000 68.499069
|
||||
134.000000 71.214015
|
||||
135.000000 71.019498
|
||||
136.000000 71.148099
|
||||
137.000000 69.342111
|
||||
138.000000 71.383217
|
||||
139.000000 71.012142
|
||||
140.000000 76.566695
|
||||
141.000000 69.486149
|
||||
142.000000 71.402444
|
||||
143.000000 71.483227
|
||||
144.000000 71.759510
|
||||
145.000000 74.985333
|
||||
146.000000 73.188678
|
||||
147.000000 72.620426
|
||||
148.000000 73.081873
|
||||
149.000000 77.713553
|
||||
150.000000 79.300275
|
||||
151.000000 82.473757
|
||||
152.000000 75.324889
|
||||
153.000000 83.748924
|
||||
154.000000 80.007542
|
||||
155.000000 80.282210
|
||||
156.000000 82.747910
|
||||
157.000000 86.457627
|
||||
158.000000 83.420580
|
||||
159.000000 86.066021
|
||||
160.000000 87.999092
|
||||
161.000000 85.212865
|
||||
162.000000 86.152684
|
||||
163.000000 83.713905
|
||||
164.000000 89.806113
|
||||
165.000000 88.863127
|
||||
166.000000 83.747370
|
||||
167.000000 85.729469
|
||||
168.000000 90.278674
|
||||
169.000000 87.186322
|
||||
170.000000 90.664731
|
||||
171.000000 89.789554
|
||||
172.000000 85.059321
|
||||
173.000000 92.954290
|
||||
174.000000 91.984821
|
||||
175.000000 92.528039
|
||||
176.000000 86.062650
|
||||
177.000000 88.554582
|
||||
178.000000 89.026777
|
||||
179.000000 89.494510
|
||||
180.000000 95.203395
|
||||
181.000000 94.680597
|
||||
182.000000 98.671727
|
||||
183.000000 92.458947
|
||||
184.000000 92.550664
|
||||
185.000000 93.584651
|
||||
186.000000 96.529280
|
||||
187.000000 91.510190
|
||||
188.000000 101.329778
|
||||
189.000000 97.326805
|
||||
190.000000 93.963321
|
||||
191.000000 101.788415
|
||||
192.000000 94.844023
|
||||
193.000000 98.012377
|
||||
194.000000 99.862506
|
||||
195.000000 104.929017
|
||||
196.000000 105.511555
|
||||
197.000000 104.173418
|
||||
198.000000 106.219756
|
||||
199.000000 99.196912
|
||||
200.000000 104.983239
|
||||
201.000000 105.612156
|
||||
202.000000 105.198355
|
||||
203.000000 108.664667
|
||||
204.000000 104.347114
|
||||
205.000000 108.862571
|
||||
206.000000 102.206320
|
||||
207.000000 105.512305
|
||||
208.000000 108.495640
|
||||
209.000000 104.686030
|
||||
210.000000 107.205950
|
||||
211.000000 109.056544
|
||||
212.000000 105.144668
|
||||
213.000000 110.019114
|
||||
214.000000 111.246693
|
||||
215.000000 114.697784
|
||||
216.000000 107.669608
|
||||
217.000000 111.021809
|
||||
218.000000 112.559574
|
||||
219.000000 115.881233
|
||||
220.000000 117.420091
|
||||
221.000000 117.527731
|
||||
222.000000 110.604158
|
||||
223.000000 119.310637
|
||||
224.000000 116.041797
|
||||
225.000000 118.162028
|
||||
226.000000 112.911618
|
||||
227.000000 114.921596
|
||||
228.000000 112.282852
|
||||
229.000000 121.759767
|
||||
230.000000 113.923272
|
||||
231.000000 119.552405
|
||||
232.000000 118.887070
|
||||
233.000000 122.143651
|
||||
234.000000 116.990503
|
||||
235.000000 125.228443
|
||||
236.000000 124.042265
|
||||
237.000000 126.339659
|
||||
238.000000 118.799490
|
||||
239.000000 124.482421
|
||||
240.000000 123.178900
|
||||
241.000000 121.283397
|
||||
242.000000 127.043408
|
||||
243.000000 127.300764
|
||||
244.000000 120.651027
|
||||
245.000000 123.519724
|
||||
246.000000 130.666442
|
||||
247.000000 130.898628
|
||||
248.000000 122.351916
|
||||
249.000000 131.201379
|
||||
250.000000 126.485689
|
||||
251.000000 125.279486
|
||||
252.000000 133.619459
|
||||
253.000000 131.267522
|
||||
254.000000 132.832665
|
||||
255.000000 130.486150
|
||||
256.000000 127.254321
|
||||
257.000000 135.538334
|
||||
258.000000 130.900252
|
||||
259.000000 136.868751
|
||||
260.000000 135.563387
|
||||
261.000000 132.244797
|
||||
262.000000 138.675247
|
||||
263.000000 139.047895
|
||||
264.000000 133.845300
|
||||
265.000000 140.018995
|
||||
266.000000 137.165498
|
||||
267.000000 135.177485
|
||||
268.000000 134.310194
|
||||
269.000000 140.809078
|
||||
270.000000 137.061594
|
||||
271.000000 139.601021
|
||||
272.000000 142.928305
|
||||
273.000000 142.447830
|
||||
274.000000 136.899126
|
||||
275.000000 138.108276
|
||||
276.000000 140.870780
|
||||
277.000000 136.562717
|
||||
278.000000 141.404804
|
||||
279.000000 147.424077
|
||||
280.000000 139.761758
|
||||
281.000000 140.529338
|
||||
282.000000 147.305599
|
||||
283.000000 145.368309
|
||||
284.000000 140.853087
|
||||
285.000000 147.523410
|
||||
286.000000 143.026952
|
||||
287.000000 148.390897
|
||||
288.000000 149.905700
|
||||
289.000000 144.663978
|
||||
290.000000 145.724384
|
||||
291.000000 147.469167
|
||||
292.000000 151.643445
|
||||
293.000000 153.741733
|
||||
294.000000 151.694803
|
||||
295.000000 149.082852
|
||||
296.000000 148.196089
|
||||
297.000000 148.974733
|
||||
298.000000 154.583509
|
||||
299.000000 147.667948
|
||||
300.000000 148.956661
|
||||
301.000000 157.204923
|
||||
302.000000 153.023764
|
||||
303.000000 156.134042
|
||||
304.000000 158.103629
|
||||
305.000000 159.174416
|
||||
306.000000 155.526722
|
||||
307.000000 158.485125
|
||||
308.000000 152.925946
|
||||
309.000000 152.636507
|
||||
310.000000 153.340815
|
||||
311.000000 156.037289
|
||||
312.000000 159.765266
|
||||
313.000000 159.756521
|
||||
314.000000 161.665146
|
||||
315.000000 162.896407
|
||||
316.000000 160.826469
|
||||
317.000000 161.637394
|
||||
318.000000 166.256212
|
||||
319.000000 166.675814
|
||||
320.000000 164.744009
|
||||
321.000000 165.130178
|
||||
322.000000 166.428968
|
||||
323.000000 165.395637
|
||||
324.000000 168.708113
|
||||
325.000000 165.036089
|
||||
326.000000 167.818445
|
||||
327.000000 169.983339
|
||||
328.000000 169.754200
|
||||
329.000000 164.279482
|
||||
330.000000 172.741400
|
||||
331.000000 165.361264
|
||||
332.000000 167.270205
|
||||
333.000000 174.115172
|
||||
334.000000 173.130451
|
||||
335.000000 174.164707
|
||||
336.000000 172.788950
|
||||
337.000000 166.513022
|
||||
338.000000 176.437103
|
||||
339.000000 174.051857
|
||||
340.000000 169.727935
|
||||
341.000000 178.125984
|
||||
342.000000 175.480246
|
||||
343.000000 173.659685
|
||||
344.000000 171.406731
|
||||
345.000000 174.030876
|
||||
346.000000 177.406337
|
||||
347.000000 179.125218
|
||||
348.000000 174.451141
|
||||
349.000000 179.924812
|
||||
350.000000 180.938294
|
||||
351.000000 183.457166
|
||||
352.000000 176.240022
|
||||
353.000000 177.460583
|
||||
354.000000 177.002543
|
||||
355.000000 183.156108
|
||||
356.000000 179.717521
|
||||
357.000000 178.123057
|
||||
358.000000 179.211013
|
||||
359.000000 185.724378
|
||||
360.000000 179.370959
|
||||
361.000000 183.285567
|
||||
362.000000 187.511417
|
||||
363.000000 187.850589
|
||||
364.000000 184.396539
|
||||
365.000000 182.186636
|
||||
366.000000 188.189620
|
||||
367.000000 183.413501
|
||||
368.000000 184.271037
|
||||
369.000000 189.968678
|
||||
370.000000 192.305016
|
||||
371.000000 189.502416
|
||||
372.000000 190.098525
|
||||
373.000000 190.704332
|
||||
374.000000 192.102748
|
||||
375.000000 189.686660
|
||||
376.000000 194.841209
|
||||
377.000000 192.983384
|
||||
378.000000 190.573300
|
||||
379.000000 195.777848
|
||||
380.000000 197.049596
|
||||
381.000000 188.911269
|
||||
382.000000 197.517406
|
||||
383.000000 195.254899
|
||||
384.000000 195.894990
|
||||
385.000000 190.714046
|
||||
386.000000 196.972954
|
||||
387.000000 197.940654
|
||||
388.000000 192.154845
|
||||
389.000000 195.568697
|
||||
390.000000 198.092042
|
||||
391.000000 202.679041
|
||||
392.000000 202.708740
|
||||
393.000000 204.425199
|
||||
394.000000 204.988617
|
||||
395.000000 195.902325
|
||||
396.000000 201.400919
|
||||
397.000000 202.658805
|
||||
398.000000 205.857207
|
||||
399.000000 199.419748
|
||||
400.000000 201.427236
|
||||
401.000000 203.995188
|
||||
402.000000 207.941074
|
||||
403.000000 208.089890
|
||||
404.000000 201.548774
|
||||
405.000000 209.628258
|
||||
406.000000 202.455859
|
||||
407.000000 207.627638
|
||||
408.000000 211.495012
|
||||
409.000000 207.295396
|
||||
410.000000 204.540182
|
||||
411.000000 209.965521
|
||||
412.000000 210.181387
|
||||
413.000000 206.685494
|
||||
414.000000 206.025939
|
||||
415.000000 209.866913
|
||||
416.000000 210.860974
|
||||
417.000000 211.728698
|
||||
418.000000 213.717862
|
||||
419.000000 210.439357
|
||||
420.000000 215.479076
|
||||
421.000000 215.634002
|
||||
422.000000 216.605436
|
||||
423.000000 218.320341
|
||||
424.000000 219.527144
|
||||
425.000000 214.317575
|
||||
426.000000 218.507562
|
||||
427.000000 212.526802
|
||||
428.000000 218.575654
|
||||
429.000000 218.720838
|
||||
430.000000 215.690194
|
||||
431.000000 217.063122
|
||||
432.000000 221.622172
|
||||
433.000000 218.980454
|
||||
434.000000 223.650525
|
||||
435.000000 217.440217
|
||||
436.000000 218.405068
|
||||
437.000000 220.511432
|
||||
438.000000 225.659634
|
||||
439.000000 227.044015
|
||||
440.000000 223.236470
|
||||
441.000000 226.537748
|
||||
442.000000 224.199055
|
||||
443.000000 222.451859
|
||||
444.000000 224.367010
|
||||
445.000000 225.417304
|
||||
446.000000 223.140206
|
||||
447.000000 222.295442
|
||||
448.000000 226.364948
|
||||
449.000000 224.560386
|
||||
450.000000 228.166792
|
||||
451.000000 228.041655
|
||||
452.000000 225.874816
|
||||
453.000000 232.871836
|
||||
454.000000 230.252569
|
||||
455.000000 225.680708
|
||||
456.000000 235.503221
|
||||
457.000000 230.235137
|
||||
458.000000 228.079254
|
||||
459.000000 235.149751
|
||||
460.000000 234.942090
|
||||
461.000000 236.538539
|
||||
462.000000 232.444580
|
||||
463.000000 232.682806
|
||||
464.000000 236.449077
|
||||
465.000000 240.450187
|
||||
466.000000 231.817796
|
||||
467.000000 233.797735
|
||||
468.000000 238.428645
|
||||
469.000000 232.974698
|
||||
470.000000 242.508818
|
||||
471.000000 241.510247
|
||||
472.000000 237.983061
|
||||
473.000000 241.859439
|
||||
474.000000 238.537365
|
||||
475.000000 236.777731
|
||||
476.000000 243.076036
|
||||
477.000000 244.868494
|
||||
478.000000 243.871791
|
||||
479.000000 246.684833
|
||||
480.000000 246.219329
|
||||
481.000000 241.248741
|
||||
482.000000 247.262100
|
||||
483.000000 241.143280
|
||||
484.000000 243.979801
|
||||
485.000000 240.505642
|
||||
486.000000 244.799621
|
||||
487.000000 250.435008
|
||||
488.000000 250.566914
|
||||
489.000000 249.690288
|
||||
490.000000 252.775043
|
||||
491.000000 244.099934
|
||||
492.000000 252.674239
|
||||
493.000000 244.622387
|
||||
494.000000 249.923331
|
||||
495.000000 245.664379
|
||||
496.000000 249.643069
|
||||
497.000000 249.658142
|
||||
498.000000 253.746202
|
||||
499.000000 247.520508
|
48
3/test_plot.py
Normal file
48
3/test_plot.py
Normal file
@ -0,0 +1,48 @@
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
from time import sleep
|
||||
|
||||
# internet
|
||||
# import matplotlib.pyplot as plt
|
||||
# import numpy as np
|
||||
|
||||
# x = np.linspace(0, 6*np.pi, 100)
|
||||
# y = np.sin(x)
|
||||
|
||||
# # You probably won't need this if you're embedding things in a tkinter plot...
|
||||
# plt.ion()
|
||||
|
||||
# fig = plt.figure()
|
||||
# ax = fig.add_subplot(111)
|
||||
# line1, = ax.plot(x, y, 'r-') # Returns a tuple of line objects, thus the comma
|
||||
|
||||
# for phase in np.linspace(0, 10*np.pi, 500):
|
||||
# line1.set_ydata(np.sin(x + phase))
|
||||
# fig.canvas.draw()
|
||||
# fig.canvas.flush_events()
|
||||
# fin internet
|
||||
|
||||
x = np.arange(0, 10, 0.01)
|
||||
y = np.cos(x)
|
||||
|
||||
plt.ion()
|
||||
|
||||
fig = plt.figure()
|
||||
ax = fig.add_subplot(111)
|
||||
|
||||
# l1 = ax.plot(x, y)[0]
|
||||
|
||||
l = ax.plot(x, y)[0]
|
||||
ax.set_xlim(0, 10)
|
||||
ax.set_ylim(-2, 10)
|
||||
arr = ax.arrow(0, 0, 0, 0)
|
||||
for i in range(10):
|
||||
arr.remove()
|
||||
# plt.clf()
|
||||
l.set_ydata(np.cos(x+i))
|
||||
arr = ax.arrow(i, 0, 1, 1)
|
||||
fig.canvas.draw()
|
||||
fig.canvas.flush_events()
|
||||
sleep(1)
|
||||
|
||||
# ax = plt.axes()
|
47
3/énoncé.txt
Normal file
47
3/énoncé.txt
Normal file
@ -0,0 +1,47 @@
|
||||
envoyer à Jean Sequeira TP3_<Nom>.py
|
||||
|
||||
1) Acquérir des points 2D (fichier ou dans le programme)
|
||||
|
||||
2) Calculer le barycentre G
|
||||
|
||||
3) Calculer la matrice de corrélation A
|
||||
| sum{x_i²} sum{x_i*y_i} |
|
||||
| sum{x_i*y_i} sum{y_i²} |
|
||||
x_i, y_i en coordonnées centrées
|
||||
|
||||
4) Diagonaliser A → lambda1 et lambda2 (lambda1 ≥ lambda2)
|
||||
u_1 et u2
|
||||
|
||||
5) Visualiser les points et le repère (G, u_1, u_2)
|
||||
|
||||
6) Faire évoluer le jeu de points en les déplaçant aléatoirement (dans le
|
||||
voisinage de leur position précédente)
|
||||
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
ce qu'on doit remettre avant dimanche:
|
||||
programme python par courriel, mettre en copie de ce mail les autres membres du
|
||||
groupe
|
||||
le nom du prgm TP3_<Nom>.py # nom de celui qui envoie par exemple
|
||||
pas de zip
|
||||
|
||||
contenu du tp:
|
||||
récupérer des pts depuis un fichier
|
||||
calculer le barycentre de tous ces pts (moyenne des coordonnées des points)
|
||||
|
||||
calculer matrice corrélation, somme des x et y de TOUS LES POINTS MOINS COORD
|
||||
BARYCENTRE (coordonnées centrées au barycentre)
|
||||
|
||||
diagonaliser la matrice A obtenue précédemment (résolution équation second degré)
|
||||
matrice symétrique définie ??? mais toujours 2 solutions
|
||||
|
||||
on récupère u1 et u2
|
||||
|
||||
et on va visualiser les points avec le nouveau repère
|
||||
|
||||
le prof a fait varier u1 et u2 en fonction des valeurs propres pour qu'ils ne
|
||||
soient pas unitaires
|
||||
(u2 - rotation de 90° de u1)
|
||||
|
||||
boucle avec le random et le refresh de la fenêtre avec les nouveau vecteurs et
|
||||
repères résultants des nouveaux points générés
|
Reference in New Issue
Block a user