作业帮 > 综合 > 作业

一个四元数旋转问题用作骨骼的计算:知道空间中3个点:ABC,其中知道A的点的四元数旋转值和坐标,BC知道坐标.向量AB转

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/05/13 22:33:06
一个四元数旋转问题
用作骨骼的计算:知道空间中3个点:ABC,其中知道A的点的四元数旋转值和坐标,BC知道坐标.向量AB转到向量AC的位置,会形成一段夹角,求解如何根据这段夹角去旋转A的四元数(也就是说夹角转多少,A的四元数就转多少).最好用c++解决,坐标是float[3],四元数是float[4].如果不能,求详解原因.
你这个问题的题面有点问题,你好像没有完全理解四元数
我感觉你题目的意思应该是已知两个向量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的第四章的内容,言简意赅