将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(Z∙V/||V||)= cos-1(Z∙V')
= 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