(原谅我的术语 - 自从我参加高级数学课以来已经很长时间了)
假设我有 n “plane”,每个“垂直”到 m 维度空间中的单个轴。没有两个平面垂直于同一轴。我相信我可以放心地假设所有 n 平面之间会有一些交叉。
我想将点 a 投影到交点上并获得结果的位置向量。
例如:
我有一个平面,其法线向量为(0.75,0,0),位置为(0.25,0,1),点 a 。我想得到投影到平面上的点 a 的位置矢量。
另一个例子:
我有两个由法向量(0.5,0,0)和(0,1,0)表示的平面。我在位置(0.1,0.1,0.1)处有一个 a 点。我想得到投影到我的两个平面(一条线)之间交叉点结果的点的位置矢量
答案 0 :(得分:1)
m - 维空间中的“平面”是(m-1) - 维对象。它们通常被称为hyperplanes - plane 的概括,3维空间中的2维对象。要定义超平面,您不仅需要法向量而且需要一个点(想想二维空间中的线:所有平行线共享相同的方向,并且为了隔离一个您需要指定一个点)。
我怀疑你的意思是你的所有超平面都要穿过原点(在这种情况下确实在交点中有一个点 - 原点本身),我将你的“垂直于单个轴”解释为法线向量都指向某个坐标轴(换句话说,它们只有一个非零组件)。在这种情况下,你需要做的就是找到任意点(矢量,真的)到交点上的投影,将这些点的分量(再次,矢量,真的)设置为沿着超平面的法线向量归零。 / p>
让我来看看你的例子:
答案 1 :(得分:0)
可以通过求解具有lstsq的最小二乘意义上的超定系统来计算投影。系统矩阵的列由法向量形成,用作列(因此,在下面的第二行上进行转置)。
coeff
是附加到这些法向量的系数;从给定点中减去法线向量的线性组合以获得投影
import numpy as np
normals = np.transpose(np.array([[0.5, 0, 0], [0, 1, 0]])) # normals
point = np.array([0.1, 0.1, 0.1]) # point
coeff = np.linalg.lstsq(normals, point)[0]
proj = point - np.dot(normals, coeff)
print(proj)
输出:[0,0,0.1]。