我在相同类型的类中使用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是我发现的最接近我要求的东西,但它只是让人感到困惑。
答案 0 :(得分:1)
不是一个完整的答案,但评论的时间太长了:
如果你有两个诚实的旋转矩阵,那么它们应该是可逆的,并且是行列式的1.调用矩阵A
和B
。如果你想检查两个旋转下同一个对象 A(X)
的图像B(X)
和X
是否“接近”,你可以去哪里通过围绕指定轴旋转,从A(X)
到B(X)
,这相当于检查通过A
乘以B
的倒数获得的矩阵是否“接近”旋转围绕那个轴。所以这可能是你想要看的东西。
我不太熟悉OpenGL矩阵数学函数,因此无法提供任何代码,抱歉。