Python 如何将三维坐标转换为新的法向量?

Python 如何将三维坐标转换为新的法向量?,python,numpy,open3d,Python,Numpy,Open3d,我有一系列坐标,所有坐标都共面到同一个平面,有一个特定的法向量。我还定义了两个垂直于法向量的向量,它们描述了3D平面内的“上/下”和“左/右”。发生变换的平面中心也是已知的 假设我有一个新的法向量,我如何变换所有的3D坐标,使其仍然在那个平面上?那么它们相对于新法线所在平面中心的相对位置仍然是相同的 我以前读过旋转矩阵,但问题是我有一个向量要变换,而不是一个描述旋转的角度,尽管平面基本上是旋转的。我想知道是否有任何方法可以使这种转换快速而简单。因此我进一步研究了旋转矩阵,发现你不一定需要知道旋转

我有一系列坐标,所有坐标都共面到同一个平面,有一个特定的法向量。我还定义了两个垂直于法向量的向量,它们描述了3D平面内的“上/下”和“左/右”。发生变换的平面中心也是已知的

假设我有一个新的法向量,我如何变换所有的3D坐标,使其仍然在那个平面上?那么它们相对于新法线所在平面中心的相对位置仍然是相同的


我以前读过旋转矩阵,但问题是我有一个向量要变换,而不是一个描述旋转的角度,尽管平面基本上是旋转的。我想知道是否有任何方法可以使这种转换快速而简单。

因此我进一步研究了旋转矩阵,发现你不一定需要知道旋转到新位置的角度

实际上,您需要做的就是将旋转矩阵与相对于上一个旋转矩阵的坐标相乘。然后你加上旋转点的坐标,就得到了

我需要在python中完成这项工作,并为此使用了numpy的matmul方法。旋转矩阵是使用我已经可用的向量生成的:

[[right.x up.x, forward.x],
[right.y, up.y, forward.y],
[right.z, up.z, forward.z]]

右、上、前为3个向量,大小为1,相互垂直。

请参见。完整的变换是三的乘积,将旋转点平移到原点,将旋转从第一条法线应用到第二条法线,并将原点平移回旋转点。轴或旋转等于新旧法线的向量积,旋转角度等于此矢量积长度的弧英寸。