将 3 轴矢量转换为轴/角度
Convert 3 axis vectors to axis/angle
我有这个源代码,它旋转了在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))
);
从"轴"变量中,我想重建四元数。我有一个四元数构造函数,它允许我从轴和角度构造它。
我该怎么做?提前谢谢你。
有一个很好的维基百科页面描述了四元数和空间旋转。具体来说,"与矩阵表示之间的转换"部分。
请务必注意该页面引用的以下要点,"将旋转矩阵转换为四元数时必须小心,因为当旋转矩阵的轨迹(对角线元素的总和)为零或非常小时,几种简单的方法往往是不稳定的。
通常,从旋转矩阵(本质上是您所构建的)转换为四元数是一个坏主意。旋转矩阵必须是特殊的正交矩阵,它是所有可能的 3x3 矩阵的非常小的子集。在计算矩阵时,您几乎总是会失去一些精度,因此它不会精确正交。事实上,这是四元数优先用于表示三维旋转的原因之一。一般来说,如果你能避免转换,只使用四元数,你会更好。
该页面上有一种算法,可以提供一种稳定的方法,可能足以满足您的目的。但是根据个人经验,我可以告诉您,在大多数情况下,您应该期望在操作中失去一些精度。
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 从角度转换为正交保持相同的模型和缩放的视图大小
- 通过3,14的角度转换从学位到弧度失败
- 将特征 3 变换的旋转转换为角度轴
- C++ 将角度转换为坐标
- 将 3 轴矢量转换为轴/角度
- Lat – 长转换器,角度和距离计算器
- 将负角度转换为正角度:涉及无效操作数的使用