我有一组点(x1,x2,..xn),这些点位于由Ax+By+Cz+d=0定义的平面上。我想找到转换矩阵,将其平移到XY平面并进行旋转。因此,新的点坐标将为x1'=(xnew, ynew,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进行归一化处理。
R = V' × Z
,而不是 R = Z × V'
。另外值得注意的是,许多轴/角度API需要将 R
规范化(但它还没有被规范化)。 - antonakos