matlab - 四元数除法不等于乘以逆(q1 / q2!= q1 * q2^-1)?
问题描述
从几个文档,如[1]和[2],我了解到对四元数的除法运算相当于乘以它的逆。也就是说,对于两个四元数q1和q2,我们有
但是,当我在 MATLAB 中验证这一点时,会给出不同的结果(也可以通过进一步将它们转换为旋转矩阵来验证quat2rotm
)。请参见下面的代码:
q1 = [1 0 1 0];
q2 = [1 0.5 0.5 0.75];
q1 = quatnormalize(q1); % this seems doesn't matter
q2 = quatnormalize(q2); % this seems doesn't matter
res_1 = quatdivide(q1, q2) % this will be [0.7385 0.1231 0.2462 -0.6155]
res_2 = quatmultiply(q1, quatinv(q2)) % this will be [0.7385 -0.6155 0.2462 -0.1231]
任何提示表示赞赏。
解决方案
请注意,四元数除法会导致模棱两可的符号。
从您的第二个参考中阅读它指出
要对此进行扩展,请查看两种解释的结果:
它们的区别在于向量部分中叉积的符号。
我怀疑quatdivide()
使用第二个约定,例如
quatdivide(q1,q2) = quatmultiply(quatinverse(q2),q1)
推荐阅读
- hive - 是否有 Hive/hcat 属性可以将分区表导出到单个文件而不是目录?
- c++ - C++ 中的“friend”关键字是什么意思?
- mysql - Mysql结果集有问题,如果主查询有0行从子查询产生结果
- haskell - Haskell 中具有 LHS 和 RHS 功能的函数定义如何/为什么起作用?
- javascript - 如何在 JS 中将以前的数据与 .catch 一起使用?
- visual-studio - 在 Visual Studio 2019 中筛选和排序项目以更好地管理多个启动项目
- jupyter-notebook - 使用 ipywidgets.FileUpload() 在 Jupyter Notebook 中上传图像
- android - 是否可以在不同的提供者之间移动 (DocumentsContract.moveDocument(...)) 或复制 (DocumentsContract.copyDocument(...)) 文件/文档?
- python - Automatic input jump tkinter
- c++ - Call child class's overriden function from parent class reference to child class