- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用 solvePnP,我正在获取一个翻译 vector 。现在我需要将一些欧拉角与 solvePnP 的结果进行比较。我想/需要将欧拉角转换为“rodrigues”;
solvePnP 的平移 vector 是否等于欧拉角。翻译矩阵是唯一与罗德里格斯有关的东西吗?或者是否有与 3 个欧拉角完全不同的特殊罗德里格斯角?两者之间的数学如何?有没有我找不到的 OpenCV 函数?
最佳答案
首先,忘记平移 vector ,因为它与旋转无关:平移移动物体,旋转改变它们的方向。
罗德里格斯参数也称为axis-angle rotation .它们由 4 个数字 [theta, x, y, z]
组成,这意味着您必须围绕单位 vector v=[x, y, z]
。看着cv::Rodrigues函数引用,OpenCV 似乎使用 Rodrigues 符号的“紧凑”表示作为具有 3 个元素的 vector rod2=[a, b, c]
,其中:
theta
是输入 vector 的模 theta = sqrt(a^2 + b^2 + c^2)
v
是归一化输入 vector :v = rod2/theta = [a/theta, b/theta, c/theta]
因此,solvePnP 的 Rodrigues vector 与 Euler angles 甚至没有一点关系。 符号,表示围绕 X、Y 和 Z 轴的组合的三个连续旋转。
如何比较两个旋转?这是一个很好的问题。 Euler- 和 Rodrigues- 表示都有奇点和其他问题。例如,如果您比较两个 Euler tern 或两个 Rodrigues 参数,它们可能看起来完全不同,但实际上代表几乎相同的旋转。如果您只需要检查两个旋转是否相同(或近似),您可以采用下一种方法:
关于c++ - 罗德里格斯转换为欧拉角,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12933284/
我是一名优秀的程序员,十分优秀!