0

我在 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;
}

这可以通过比较两个旋转矩阵来实现吗?我需要转换为四元数并使用它们吗?

这个问题是我发现的最接近我所问的问题,但它的不同足以令人困惑。

4

1 回答 1

1

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

如果你有两个诚实的旋转矩阵,那么它们应该是可逆的,并且行列式为 1。调用矩阵AB。如果要检查两次旋转下的图像和A(X)同一物体的图像是否“接近”,即您可以通过围绕指定轴旋转从到inverse of是“几乎”围绕该轴旋转。所以这可能是你想看的东西。B(X) XA(X)B(X)AB

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

于 2014-01-03T22:50:46.650 回答