将直线投影到平面上的公式

问题描述 投票:0回答:1

我有一个向量并将其投影到平面上。我尝试计算投影,但发现公式似乎不正确。

这是我的代码:

import pandas as pd

# n is the normalized normal of the plane and v is the vector
n = np.array([0.6,  0.3, -0.7])
v = np.array([-415, 212, 180])

p =  v - np.dot(v, n) / (np.linalg.norm(n)**2) * n
# array([-216.23404255,  311.38297872,  -51.89361702])

cross_product = np.cross(p, n)
# array([202.4, 182.5, 251.7])

” 如果该公式有效,则平面上的投影“p”应垂直于法线“n” np.cross() 结果应该是 (0,0,0)。然而,如上所示,交叉结果是([202.4, 182.5, 251.7])。

我不知道为什么这个公式在这里不起作用。谁能帮我解答一下吗?

python math 3d projection
1个回答
0
投票

好吧,你正在做的是使用“投影”p来计算叉积,而你需要使用投影向量来获得叉积,你可以通过

来完成
projected_vector = v - p

然后使用projected_vector计算叉积:

cross_product = np.cross(projected_vector, n)

减法详细解释: 当你计算投影时,你实际上找到了向量v在平面法线方向上的分量,获得了v在平面上的分量,你从原始向量中减去这个投影。 如果直接使用 p 向量(投影),则仅使用投影分量并忽略平面中的分量。

© www.soinside.com 2019 - 2024. All rights reserved.