有很多文章和帖子讨论四元数在3D游戏旋转方面的应用,但是四元数旋转公式是怎么来的,很多人都不清楚,资料也很少,这里推导一下,欢迎大家指正。
命题:设四元数u= a*i + b*j + c*k,且 u^2= -1;对于任意四元数p,以u为轴正向旋转(右手坐标系中逆时针方向,左手坐标系中顺时针方向)θ角度,得到向量p',则:p' =r* p * r^(-1),其中r =cos(θ/2) + sin(θ/2) * u。
证明:
r*r ^(-1)= 1 = r ^(-1) * r ......( 1)
在方程( 1)两边同时乘以r的共轭r*,可以得到:
r*= r ^(-1) * r * r * = r ^(-1) * |r| ^2 ......( 2)
又由:|r|^2 = (cos(θ /2))^2 + (sin(θ /2))^2*( a^2 + b^2 + c^2) = 1
得r^(-1)= r */ |r| ^2 = r * =cos(θ /2) -sin(θ /2) * u
如图所示, 设四元数v与u垂直,与 u,p共面,且v^2 = -1;四元数w =u * v ,则u ,v ,w组成一个直角坐标系。
设p = s *u + t *v,
则r*p*r^(-1) = (cos(θ/2)+sin(θ/2) * u) * ( s * u + t * v ) * (cos(θ/2) -sin(θ/2) * u)
= ( s * cos(θ/2)* u +t* cos(θ/2)*v -s* sin(θ/2) +t* sin(θ/2)*w) * (cos(θ/2) -sin(θ/2) * u)
= s* (cos(θ/2))^2* u + t* (cos(θ/2))^2*v - s* sin(θ/2)* cos(θ/2) + t* sin(θ/2)* cos(θ/2)*w
+s* sin(θ/2)* cos(θ/2) +t* sin(θ/2)* cos(θ/2)*w -s*(sin(θ/2))^2*u - t*(sin(θ/2))^2*v
=s*u +t* cos(θ)*v +t* sin(θ)*w
由此可知,p’是由p绕u正向旋转θ角度而得。