将3D点转换为2D

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

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

谢谢

回答:

首先,除非在你的平面方程,d = 0,没有linear transformation你可以申请。您需要改为执行affine transformation。

要做到这一点的一种方法是确定一个角度和矢量,以使您的点位于与XY平面平行的平面上(即,变换点集的Z分量都具有相同的值) 。然后你只需放下Z分量。

为此,让 V是包含您的点的平面的归一化平面法线。为方便起见从平面方程上述AX + +锆+ 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')

ř关于哪个旋转只是归一化平面的正交叉积V' Z。也就是说

R = V'×Z

= (B', -A', 0)

现在你可以使用这个角度/轴对建立在你的数据集旋转所有的点平行于XY平面的平面所需要的quaternion rotation。然后,我刚才说过,只需放下Z分量即可在XY平面上执行正交投影。

更新:在使用API​​获取轴/角度对之前,antonakos关于正常化R有一个好处。

以上是 将3D点转换为2D 的全部内容, 来源链接: utcz.com/qa/261129.html

回到顶部