四元数在3d模型上的加法,减法和除法运算

use*_*536 5 3d quaternions graphics3d

我只是在3D游戏编程中更深入地使用四元数(是的,我知道矩阵并且它们没问题,但我们总是要学习一些新东西),所以,我们可以像这样旋转一些对象Pout = q*Pin*conjug(q),q在哪里是四元数,Pin是一个对象(假设我们正在使用一些框架,这个类是为我们定义的)Vector3类,conjug(q)是它的共轭后的q四元数,最后Pout是新的Vector3的对象,我们得到了在旋转初始Vector3的对象之后Pin通过一些角度α(或theta,无论你喜欢什么).另外,我知道有一种方法可以组合旋转,如下所示:q_final = q2*q1(这表示由alfa1旋转,然后由alfa2角度旋转).最后,点积表示2个四元数之间的角度,比方说球体.这对我来说很清楚.我的问题将涉及分裂,加法和减法等问题.

我的问题是:有人可以告诉我,他们在3D编程中代表什么(划分,添加,减去四元数操作)?它们将如何影响3D模型?

先谢谢您的回答.

ps如果你(DarenW,bensiu,Dharmendra,Uwe Keim,Jennis)无法理解这个问题,请留下这个话题.有人可能会有答案.谢谢.

Cod*_*key 11

如您所知,四元数可用4x4实矩阵识别.这种识别保留了四元数乘法,标量乘法和加法(参见http://en.wikipedia.org/wiki/Quaternion#Matrix_representations).因此,将两个四元数转换为4x4矩阵,添加它们并将它们转换回来与添加它们相同.乘法也是如此.

通过四元数B对四元数A的除法只不过是乘以A乘以B的乘法逆.这相当于A的矩阵形式乘以B的矩阵形式的倒数.

请注意,刚体旋转(无剪切或缩放)由单位长度四元数表示.因此,您可以通过乘以单位数来累积旋转.在这种情况下的添加不那么有用.

最后,我们在图形中使用quaterions的主要原因是插入关键帧(例如Eberly 1999).也就是说,如果我们知道k个位置处的所需旋转,我们可以插入四元数,例如使用样条曲线,从而得到四元数值曲线.每个值C(t)是单位四元数,因此它表示中间旋转.对于均匀矩阵,关键帧插值更难,因为并非所有4x4矩阵都表示齐次变换:插值过程可能会增加缩放,剪切等.