You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.4 KiB
63 lines
1.4 KiB
import numpy as np
|
|
import matplotlib.pyplot as plt
|
|
|
|
# Exercice 1
|
|
|
|
P = np.array([[-1,3], [2,6],[7,8],[4,1]])
|
|
print(P)
|
|
|
|
assert isinstance(P,np.ndarray) and P.shape==(4,2), "P n'a pas le bon format"
|
|
nombre = P[2][0]
|
|
print(nombre)
|
|
assert nombre == 7, "Le nombre n'est pas bon"
|
|
|
|
P1 = P[1]
|
|
print(P1)
|
|
assert np.array_equal(P1,np.array([2,6])), "P1 n'est pas bon"
|
|
|
|
Psaufdernier = P[:-1]
|
|
print(Psaufdernier)
|
|
assert Psaufdernier.shape == (3,2), "Psaufdernier n'a pas le bon format"
|
|
|
|
P_x = P[:,0]
|
|
print(P_x)
|
|
|
|
# plt.figure()
|
|
# plt.plot(P_x,P[:,1], 'o')
|
|
# plt.plot(P_x,P[:,1])
|
|
# # plt.show()
|
|
|
|
|
|
# Exercice 2
|
|
|
|
def CasteljeuEtape(t,P):
|
|
return (1-t)*P[:-1] + t*P[1:]
|
|
|
|
def bezierCasteljeu(t,P):
|
|
n = len(P)
|
|
for i in range(n-1):
|
|
P = CasteljeuEtape(t,P)
|
|
plt.plot(P[:,0],P[:,1])
|
|
return P
|
|
|
|
P = np.array([[-1,3],[2,6],[7,8],[4,1]])
|
|
plt.figure()
|
|
plt.plot(P[:,0],P[:,1], 'o')
|
|
plt.plot(P[:,0],P[:,1])
|
|
bezierCasteljeu(0.5, P)
|
|
# plt.show()
|
|
|
|
# Exercice 3
|
|
|
|
def bezierRec(t,P):
|
|
if P.shape [0]==1:
|
|
return P[0]
|
|
else:
|
|
return (1-t)*bezierRec(t,P[:-1]) + t*bezierRec(t,P[1:])
|
|
|
|
P = np.array([[0,0],[7,0],[13,5],[10,-2],[12,-7],[9,-10],[11,-13],[11,-13],[11,-22],[10,-24],[12,-27],[10,-29],[8,-25],[-1,-25],[-3,-29],[-5,-27],[-4,-24],[-6,-22],[-6,-13],[-4,-10],[-6,-8],[-3,-2],[-6,4],[0,0]])
|
|
plt.figure()
|
|
plt.plot(P[:,0],P[:,1], 'o')
|
|
plt.plot(P[:,0],P[:,1])
|
|
bezierCasteljeu(0.5,P)
|
|
plt.show() |