Lấy (d, e, f)
và trừ phép chiếu của nó vào bình thường hóa bình thường sang mặt phẳng (trong trường hợp của bạn là (a, b, c)
). Vì vậy:
v = (d, e, f)
- sum((d, e, f) *. (a, b, c)) * (a, b, c)/sum((a, b, c) *. (a, b, c))
Ở đây, bởi *.
tôi có nghĩa là các sản phẩm thành phần khôn ngoan. Vì vậy, điều này có nghĩa:
sum([x * y for x, y in zip([d, e, f], [a, b, c])])
hoặc
d * a + e * b + f * c
nếu bạn chỉ muốn được rõ ràng nhưng pedantic
và tương tự cho . Như vậy, trong Python:
from math import sqrt
def dot_product(x, y):
return sum([x[i] * y[i] for i in range(len(x))])
def norm(x):
return sqrt(dot_product(x, x))
def normalize(x):
return [x[i]/norm(x) for i in range(len(x))]
def project_onto_plane(x, n):
d = dot_product(x, n)/norm(n)
p = [d * normalize(n)[i] for i in range(len(n))]
return [x[i] - p[i] for i in range(len(x))]
Sau đó, bạn có thể nói:
p = project_onto_plane([3, 4, 5], [1, 2, 3])
đây không phải là một vấn đề trăn; đây là một vấn đề toán học thông thường –