如何比较对象之间的相对旋转?

时间:2014-01-03 22:41:53

标签: c++ opengl matrix rotational-matrices

我在相同类型的类中使用3D空间中的两个对象(使用OpenGL来渲染它们)。这些对象存储xyz偏移量和表示标准4x4旋转矩阵的旋转矩阵。

一个精简的例子:

class object {
  float rotMatrix[16];
  float xyzTrans[3];
  //a displaylist for drawing the object
}

我正在使用GLUI进行UI控件,这使得以格式存储转换变得非常简单。

问题: 我需要为一个对象定义另一个对象的“正确”方向。例如,如果第一个对象直接面向z轴,第二个对象是相同的,但也围绕x轴旋转大约45度,这将被视为“正确”,我的功能做他们需要做的事情。这当然可以变化,可能是相同的z但是在x和y上旋转,或者甚至可以围绕每个轴旋转一点点。 “正确”旋转的定义将存储在对象中以进行比较。

理想情况下,我希望做类似的事情:

bool checkRotation(object* first, object* second) { 
   //do some comparison stuff

   if (eachCheck < someTolerance)
      return true;
   return false;
}

通过比较两个旋转矩阵可以做到这一点吗?我是否需要转换为四元数并使用它们?

This question是我发现的最接近我要求的东西,但它只是让人感到困惑。

1 个答案:

答案 0 :(得分:1)

不是一个完整的答案,但评论的时间太长了:

如果你有两个诚实的旋转矩阵,那么它们应该是可逆的,并且是行列式的1.调用矩阵AB。如果你想检查两个旋转下同一个对象 A(X)的图像B(X)X是否“接近”,你可以去哪里通过围绕指定轴旋转,从A(X)B(X),这相当于检查通过A乘以B的倒数获得的矩阵是否“接近”旋转围绕那个轴。所以这可能是你想要看的东西。

我不太熟悉OpenGL矩阵数学函数,因此无法提供任何代码,抱歉。