将3D点转换为2D

时间:2011-06-07 11:42:59

标签: math matrix 3d

我有一组点(x1,x2,... xn)位于由Ax + By + Cz + d = 0定义的平面上。 我想找到转换矩阵来平移和旋转到XY平面。因此,新的点坐标将是x1'=(xnew,ynew,0)。

许多答案给出了四元数,点数或交叉积矩阵。我不确定哪一个是正确的方法。

谢谢

1 个答案:

答案 0 :(得分:8)

首先,除非在您的平面方程式中,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(ZV / ||V||)
  = cos-1(ZV')
  = cos-1(C')

关于旋转的轴 R 只是归一化平面法线 V' Z 的叉积。那是

R = V'×Z
  = (B', -A', 0)

现在,您可以使用此角度/轴对构建将数据集中的所有点旋转到与XY平面平行的平面所需的quaternion rotation。然后,我先前说过,只需放下Z分量即可在XY平面上执行正交投影。

更新:在使用采用轴/角度对的API之前,antonakos对于 R 的标准化提出了一个很好的观点。