这篇文章为中文繁体,但看起来还是很容易的,内容很好。值得推荐: Computer Graphics: 四元數與旋轉在討論「四元數」之前,我們來想想對三維直角座標而言,在物體旋轉會有何影響,可以擴充三維直角座標系統的旋轉為三角度系統(Three-angle system),在Game Programming Gems中有提供這麼一段:
Quaternions do not suffer from gimbal lock. With a three-angle(roll, pitch, yaw) system, there are always certain orientations in which there is no simple change to the trhee values to represent a simple local roation. You often see this rotation having "pitched up" 90 degree when you are trying to specify a local yaw for right.
i
2
= j
2
= k
2
= -1
i * j = k = -j * i j * k = i = -k * j k * i = j = -i * k
q
1
= w
1
+ x
1
i + y
1
j + z
1
k
q 2 = w 2 + x 2 i + y 2 j + z 2 k
q
1 + q
2 = (w
1+w
2) + (x
1+x
2) i + (y
1+y
2) j + (z
1+z
2) k
q1 * q2 =
(w1*w2 - x1*x2 - y1*y2 - z1*z2) +
(w 1 *x 2 + x 1 *w 2 + y 1 *z 2 - z 1 *y 2 ) i + (w 1 *y 2 - x 1 *z 2 + y 1 *w 2 + z 1 *x 1 ) j + (w 1 *z 2 + x 1 *y 2 - y 1 *x 2 + z 1 *w 2 ) k 由於q = w + x i + y j + z k中可以分為純量w與向量x i + y j + z k,所以為了方便表示,將q表示為(S, V),其中S表示純量w,V表示向量x i + y j + z k,所以四元數乘法又可以表示為:
q1 * q2 = (S
1
+ V
1
)*(S
2
+ V
2
) = S
1
*S
2
- V
1
.V
2
+ V
1
XV
2
+ S
1
*V
2
+ S
2
*V
1
N(q) = |q| = x
2
+ y
2
+ z
2
+ w
2
q* = 定義四元數q = w - x i - y j -z k = [S - V]
1/ q = q* / N(q)
x = s * Xa
y = s * Xb z = s * Xc w = cos(θ/2) s = sin(θ/2)
在这里,我将自己加一个上面公式的反推导,我们将根据四元数求我们用于旋转它的向量A(Xa, Ya, Za)。 公式如下: θ =acos(w)*2 s=sin(θ/2) Xa=x/s Xb=y/s Xc=c/s 这个公式在编程当中也很有用,至于有什么用,偶现在还不清楚。
Rot(P) = q p q*
q = [w, x, y, z] = [S, V]
|
Gossip@caterpillar |