gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 07:11:25 25 4
gpt4 key购买 nike

我在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com