如何使用Quaternion在3D中旋转平面?

时间:2014-11-07 14:39:36

标签: c# kinect quaternions

我试图融合来自两个独立Kinects的骷髅。

从第一个Kinect开始,我有skeleton1,从中我选择4个点,对应4个关节。通过这4点,我可以构建一个它们都是的平面。平面系数Ax + By + Cz = D是已知的。据我所知,Quaternion的飞机将是Q = (D; A; B; C)

从第二个Kinect我有相同的数据,但是在第二个Kinect坐标系中。

如何从第二个Kinect旋转平面,使其与第一个Kinect的平面方向相同?

1 个答案:

答案 0 :(得分:1)

不幸的是,四元数不会这样。它们不代表平面,只能通过重新排列平面方程的分量来创建(平面方程有两个自由度,而四元数是旋转/方向的非参数表示)。

但是,如果您正在寻找两个法向量之间的旋转(每个平面一个),这会将一个平面转换为另一个平面,这是一个相对简单的任务:

  • 如果两个法线向量相同,则不需要旋转,结果是标识,
  • 如果两个矢量是平行的(它们的点积为零)但相同,则它们之间的变换是围绕垂直于它们的任意轴旋转180度,
  • 在所有其他情况下,您可以使用交叉产品(和标准化)计算旋转轴,使用其dotproduct的反余弦计算角度。

如果你仍然需要从中创建一个四元数,你可以使用trigonometry一点。