如何正确地沿着旋转轴的所有四元数
答案:1 悬赏:10 手机版
解决时间 2021-02-28 12:16
- 提问者网友:星軌
- 2021-02-28 01:16
如何正确地沿着旋转轴的所有四元数
最佳答案
- 五星知识达人网友:神的生死簿
- 2021-02-28 02:15
你这个问题的题面有点问题,像没有完全理解四元数
我感觉你题目的意思应该是已知两个向量AB、AC,然后求从B点到C点的以A点为轴旋转过程的四元数表达吧
这个其实很简单,我给你讲一下原理和计算方法,具体代码你自己写吧
首先四元数的本质是旋转轴+旋转角度的表达
先统一一下,你的float[3]我们记作vector3,float[4]记作vector4
- 这里旋转轴是什么?是向量AB和AC的叉乘(即向量的外积)
故求解出的旋转轴我们记做vector3类型的u,normal(u)=1, 即要单位化
- 旋转角度记作α的话,我们取β=α/2
旋转轴u和旋转角度β都有了,带入单位四元数(unit quaternion)的公式
四元数q = (sinβu, cosβ)
把vector3向量u展开计算后,就是vector4型的四元数了
即, 若q = (x, y ,z w), u=(ux, uy, uz),则x=sinβux, y=sinβuy,z=sinβuz,w=cosβ
我这里略去了很多不影响计算结果的细节问题,比如旋转轴方向,单位四元数的概念及公式推导,如果你对这些感兴趣,那你可以读一下Tomas Akenine-Moller的<>第四章的内容,言简意赅
我感觉你题目的意思应该是已知两个向量AB、AC,然后求从B点到C点的以A点为轴旋转过程的四元数表达吧
这个其实很简单,我给你讲一下原理和计算方法,具体代码你自己写吧
首先四元数的本质是旋转轴+旋转角度的表达
先统一一下,你的float[3]我们记作vector3,float[4]记作vector4
- 这里旋转轴是什么?是向量AB和AC的叉乘(即向量的外积)
故求解出的旋转轴我们记做vector3类型的u,normal(u)=1, 即要单位化
- 旋转角度记作α的话,我们取β=α/2
旋转轴u和旋转角度β都有了,带入单位四元数(unit quaternion)的公式
四元数q = (sinβu, cosβ)
把vector3向量u展开计算后,就是vector4型的四元数了
即, 若q = (x, y ,z w), u=(ux, uy, uz),则x=sinβux, y=sinβuy,z=sinβuz,w=cosβ
我这里略去了很多不影响计算结果的细节问题,比如旋转轴方向,单位四元数的概念及公式推导,如果你对这些感兴趣,那你可以读一下Tomas Akenine-Moller的<
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯