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

C++ 如何比较对象之间的相对旋转?,c++,opengl,matrix,rotational-matrices,C++,Opengl,Matrix,Rotational Matrices,我在3D空间中有两个相同类型的类的对象(使用OpenGL渲染)。这些对象存储xyz偏移和表示标准4x4旋转矩阵的旋转矩阵 一个简单的例子: class object { float rotMatrix[16]; float xyzTrans[3]; //a displaylist for drawing the object } 我使用GLUI控件,这使得以格式存储转换非常简单 问题是: 我需要定义一个对象相对于另一个对象的“正确”方向。例如,如果第一个对象正对着z轴,而第二个对象

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

一个简单的例子:

class object {
  float rotMatrix[16];
  float xyzTrans[3];
  //a displaylist for drawing the object
}
我使用GLUI控件,这使得以格式存储转换非常简单

问题是: 我需要定义一个对象相对于另一个对象的“正确”方向。例如,如果第一个对象正对着z轴,而第二个对象是相同的,但也围绕x轴旋转了大约45度,则这将被视为“正确”,并且我的函数执行它们需要执行的操作。当然,这可能会有所不同,可能是相同的z,但在x和y轴上旋转,或者甚至可能绕每个轴旋转一点。“正确”旋转的定义将存储在对象中以供比较

理想情况下,我希望做以下事情:

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

   if (eachCheck < someTolerance)
      return true;
   return false;
}
bool checkRotation(对象*第一,对象*第二){
//做一些比较
如果(每个检查
这可以通过比较两个旋转矩阵来实现吗?我需要转换成四元数并使用它们吗


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

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

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


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

这很有用,可能是一个好的开始-尝试看看我能用您提供的信息做些什么。最大的问题是我关心两个项目之间的旋转——也就是说,如果它们的最终方向与定义相匹配。通过寻找到原点的距离来确定位置很容易,也许这些矩阵也有类似的想法?你能在两个矩阵之间找到一个相对的“距离/差”吗,这样可以确保得到一个非常正确的结果?