pr info je trouve sensiblement la même chose
- Code: Tout sélectionner
import numpy as np
def d(v):
return np.linalg.norm(v)
def rotate(angle, point, scale, center):
v_dir = (point - center) / d(point - center)
return np.dot([
[np.cos(angle), -np.sin(angle)],
[np.sin(angle), np.cos(angle)]
], v_dir) * scale + center
N = np.array([0, 0])
M = np.array([4, 0])
O = rotate(np.radians(65), M, 5, N)
d_OP = d(M-O) / np.cos(np.radians(40))
P = rotate(np.radians(40), M, d_OP, O)
angle_PMQ = np.arccos((9 - 2 * d(P-M) ** 2) / (-2 * d(P-M) ** 2))
Q = rotate(-angle_PMQ, P, d(P-M), M)
R = rotate(np.radians(-60), Q, d(P-M), M)
print('M', M)
print('N', N)
print('O', O)
print('P', P)
print('Q', Q)
print('R', R)
#M [4 0]
#N [0 0]
#O [2.11309131 4.53153894]
#P [7.80241265 1.58330439]
#Q [ 7.86784042 -1.41598206]
#R [ 4.70764377 -4.0576391 ]
