我有一个平面,plane A
,由它的正交向量定义,比如(a, b, c)
。
(即矢量(a, b, c)
与plane A
正交)
我希望将向量(d, e, f)
投影到plane A
上。
如何在Python中执行此操作我认为一定有一些简单的方法。
取(d, e, f)
,减去它在平面归一化法线上的投影(在您的情况下为(a, b, c)
)。因此:
v = (d, e, f)
- sum((d, e, f) *. (a, b, c)) * (a, b, c) / sum((a, b, c) *. (a, b, c))
这里,*.
是指分量乘积。这意味着:
sum([x * y for x, y in zip([d, e, f], [a, b, c])])
或
d * a + e * b + f * c
如果你只是想清楚但迂腐的
并且类似地用于CCD_ 10。因此,在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))]
然后你可以说:
p = project_onto_plane([3, 4, 5], [1, 2, 3])