如何将 3D 坐标转换为新的法向量?
How do I transform 3D coordinates to a new normal vector?
我有一系列坐标,所有坐标都与具有特定法向量的同一平面共面。我还定义了两个垂直于描述该 3D 平面内 "up/down" 和 "left/right" 的法向量的向量。变换应围绕其发生的平面中心也是已知的。
假设我有一个新的法线向量,我如何将所有这些 3D 坐标转换为仍在该平面中?那么它们相对于具有新法线的平面中心的相对位置仍然相同吗?
我之前读过有关旋转矩阵的内容,但问题是我有一个要变换到的向量,而不是描述旋转的角度,尽管平面本质上确实进行了旋转。我想知道有没有什么方法可以让这个转换变得又快又简单。
所以我深入研究了旋转矩阵,发现您不一定需要知道旋转到新位置的角度。
实际上,您需要做的就是将旋转矩阵乘以相对于前一个旋转矩阵的坐标。之后,添加旋转点的坐标即可。
我需要在 python 中执行此操作并为此使用了 numpy 的 matmul 方法。旋转矩阵是使用我已经可用的向量制作的:
[[right.x up.x, forward.x],
[right.y, up.y, forward.y],
[right.z, up.z, forward.z]]
向右、向上和向前是大小为 1 的 3 个相互垂直的向量。
我有一系列坐标,所有坐标都与具有特定法向量的同一平面共面。我还定义了两个垂直于描述该 3D 平面内 "up/down" 和 "left/right" 的法向量的向量。变换应围绕其发生的平面中心也是已知的。
假设我有一个新的法线向量,我如何将所有这些 3D 坐标转换为仍在该平面中?那么它们相对于具有新法线的平面中心的相对位置仍然相同吗?
我之前读过有关旋转矩阵的内容,但问题是我有一个要变换到的向量,而不是描述旋转的角度,尽管平面本质上确实进行了旋转。我想知道有没有什么方法可以让这个转换变得又快又简单。
所以我深入研究了旋转矩阵,发现您不一定需要知道旋转到新位置的角度。
实际上,您需要做的就是将旋转矩阵乘以相对于前一个旋转矩阵的坐标。之后,添加旋转点的坐标即可。
我需要在 python 中执行此操作并为此使用了 numpy 的 matmul 方法。旋转矩阵是使用我已经可用的向量制作的:
[[right.x up.x, forward.x],
[right.y, up.y, forward.y],
[right.z, up.z, forward.z]]
向右、向上和向前是大小为 1 的 3 个相互垂直的向量。