5allssss
幼苗
共回答了12个问题采纳率:100% 举报
你这个问题的题面有点问题,你好像没有完全理解四元数
我感觉你题目的意思应该是已知两个向量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的第四章的内容,言简意赅
1年前
8