将3D点转换为2D

ste*_*hie 7 math 3d matrix

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

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

谢谢

and*_*and 8

首先,除非在平面方程中,d = 0,否则不能应用线性变换.您需要执行仿射变换.

一种方法是确定一个角度和矢量,使其旋转以使您的点集位于与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)

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

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