Nehmen Sie (d, e, f)
und subtrahieren Sie die Projektion davon auf die normalisierte Normale zur Ebene (in Ihrem Fall (a, b, c)
). Also:
v = (d, e, f)
- sum((d, e, f) *. (a, b, c)) * (a, b, c)/sum((a, b, c) *. (a, b, c))
hier durch *.
meine ich die komponentenweise Produkt. So würde dies bedeuten:
sum([x * y for x, y in zip([d, e, f], [a, b, c])])
oder
d * a + e * b + f * c
, wenn Sie gerade sein wollen klar, aber pedantisch
und in ähnlicher Weise für . So wird in 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))]
Dann können Sie sagen:
p = project_onto_plane([3, 4, 5], [1, 2, 3])
ist dies kein Problem Python; Dies ist ein normales mathematisches Problem –