c++ - 如何比较物体之间的相对旋转?

标签 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。调用矩阵 AB。如果你想检查 A(X)B(X) 同一对象 X在这两个旋转下是“接近”的意思是你可以通过绕指定轴旋转从 A(X)B(X),这等同于检查通过 A 乘以 B 的倒数得到的矩阵是否“几乎”绕该轴旋转。所以这可能是您想要查看的内容。

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

关于c++ - 如何比较物体之间的相对旋转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20914052/

相关文章:

python - 使用 OpenGL 在 Python 中进行 3d 绘图

python - python中的矩阵镜像

c++ - 带有 C 接口(interface)的 Objective C 库

opengl - GLU NURBS 渲染错误

c++ - 错误LNK2019简单链表实现

windows - 多窗口 OpenGL/Glut

powershell - 交换矩阵中的第一列和最后一列

arrays - 根据第一列中的标签将第二列中的元素相乘

c++ - 神经网络为不同的输入提供相同的输出,不学习

c++ - 编译和使用 OpenCV