我有一组点 (x1, x2,..xn) 位于由 Ax+ By+Cz+d=0 定义的平面上。
我想找到转换矩阵来平移和旋转到 XY 平面。因此,新点坐标将为 x1'=(xnew, ynew,0)。
很多答案都给出了四元数、点或叉积矩阵。我不确定哪一种是正确的方法。
谢谢
最佳答案
首先,除非在你的平面方程中,d=0,否则没有linear transformation你可以申请。您需要改为执行 affine transformation .
一种方法是确定旋转的角度和向量,以使您的点集位于平行于 XY 平面的平面中(即,变换后的点集的 Z 分量都具有相同的值)。然后您只需删除 Z 组件。
为此,让 V 成为包含您的点的平面的归一化平面法线。为方便起见,从上面 Ax+By+Cz+d=0 的平面方程中定义:
V = (A, B, C)
V' = V/||V|| = (A', B', C')
Z = (0, 0, 1)
在哪里
A' = A/||V||
B' = B/||V||
C' = C/||V||
||V|| = (A2+B2+C2)1/2
角度将是:
θ = cos-1(Z∙V/||V||)
= cos-1(Z∙V')
= cos-1(C')
绕其旋转的轴 R 只是归一化平面法线 V' 和 Z 的叉积。即
R = V'×Z
= (B', -A', 0)
您现在可以使用这个角度/轴对来构建 quaternion rotation需要将数据集中的所有点旋转到平行于 XY 平面的平面。然后,我之前说过,只需放下 Z 分量即可在 XY 平面上进行正交投影。
更新: antonakos 在使用 API 获取轴/角度对之前就规范化 R 提出了一个很好的观点。
关于math - 将 3D 点转换为 2D,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6264664/