在Python中,如何将向量投影到由其正交向量定义的平面上?

在Python中,如何将向量投影到由其正交向量定义的平面上?,python,math,3d,linear-algebra,Python,Math,3d,Linear Algebra,我有一个平面,平面a,由它的正交向量定义,比如说(a,b,c) (即向量(a,b,c)与平面a正交) 我希望将一个向量(d,e,f)投影到平面a上 用Python怎么做呢?我想一定有一些简单的方法。取(d,e,f),减去它在平面的标准化法线上的投影(在你的例子中(a,b,c))。因此: 这里所说的*。是指组件式产品。这意味着: sum([x * y for x, y in zip([d, e, f], [a, b, c])]) 或 如果你只是想说清楚,但学究 对于(a,b,c)*也同样如此。(

我有一个平面,
平面a
,由它的正交向量定义,比如说
(a,b,c)

(即向量
(a,b,c)
平面a
正交)

我希望将一个向量
(d,e,f)
投影到
平面a

用Python怎么做呢?我想一定有一些简单的方法。

(d,e,f)
,减去它在平面的标准化法线上的投影(在你的例子中
(a,b,c)
)。因此:

这里所说的
*。
是指组件式产品。这意味着:

sum([x * y for x, y in zip([d, e, f], [a, b, c])])

如果你只是想说清楚,但学究

对于
(a,b,c)*也同样如此。(a、b、c)
。因此,在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])

这不是python的问题;这是一道普通的数学题*。编译器似乎无法识别:SyntaxError:无效语法。为什么?@perfectionm1ng:因为它不是Python。我为您详细说明了如何将
*。
翻译成Python。哦,我明白了。我是Python的新手。你能告诉我密码吗?我知道怎样做数学题。我不知道,因此我要问的是如何在Python代码中做到这一点。谢谢你的代码!但是对于
norm()
,它不应该是
sqrt(dot_-product(x,x))
而不是
dot_-product(x,x)
?@perfectionm1ng:是的,对不起。
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])