gpt4 book ai didi

c++ - 将 3 个轴 vector 转换为轴/角度

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:19:44 25 4
gpt4 key购买 nike

我有这个源代码,它旋转三个轴对齐在 X、Y 和 Z 上:

    Quaternion<float> orientation = transform.getOrientation();
Vector3<Vector3<float>> axis(
orientation.rotate(Vector3<float>(1.0, 0.0, 0.0)),
orientation.rotate(Vector3<float>(0.0, 1.0, 0.0)),
orientation.rotate(Vector3<float>(0.0, 0.0, 1.0))
);

根据“轴”变量,我想重新构建四元数。我有一个四元数构造函数,它允许我从一个轴和一个角度构造它。

我该怎么做?提前谢谢你。

最佳答案

有一个很好的维基百科页面描述了Quaternions and spatial rotation .具体来说,“与矩阵表示形式的转换”部分。

一定要注意以下几点,引用自该页,“将旋转矩阵转换为四元数时必须小心,因为当跟踪(对角线元素的总和)时,几种直接的方法往往不稳定旋转矩阵的为零或非常小。”

一般来说,从旋转矩阵(本质上是您构造的矩阵)转换为四元数不是一个好主意。旋转矩阵必须是一个特殊的正交矩阵,它是所有可能的 3x3 矩阵的一个非常小的子集。在计算矩阵时,您几乎总是会失去一些精度,因此它不会精确正交。事实上,这是首选四元数来表示 3 维旋转的原因之一。一般来说,如果您可以避免转换并只使用四元数,您会过得更好。

该页面上有一个算法提供了一个稳定的方法,可能足以满足您的目的。但根据个人经验,我可以告诉你,在大多数情况下,你应该预料到在操作中会失去一些精度。

关于c++ - 将 3 个轴 vector 转换为轴/角度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28135576/

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