绕轴旋转问题

在图形学坐标变换中,绕轴旋转是非常重要和常见的,例如在生成Camera和World的变换关系时广泛使用。
以前曾得到过这个变换公式,但已经忘了是如何导出的,甚或是直接抄来的。现在索性重新推导一遍。

设轴的矢量为[x, y, z]
为构成右手系A系,需要补充两个正交向量:
[e, f, g]
[u, v, w]

根据右手系,有以下关系:
u = y*g-z*f
v = z*e-x*g
w = x*f-y*e

e = v*z-w*y
f = w*x-u*z
g = u*y-v*x

x = f*w-g*v
y = g*u-e*w
z = e*v-f*u

由A系到原坐标系的坐标变换矩阵是:
A = [e, u, x;
     f, v, y;
     g, w, z]

矢量旋转坐标变换矩阵是:
R = [c, -s, 0;
     s,  c, 0;
     0,  0, 1]

于是总的绕轴旋转矩阵是:
T = A * R * A'
  = [(e*c+u*s)*e+(-e*s+u*c)*u+x^2, (e*c+u*s)*f+(-e*s+u*c)*v+x*y, (e*c+u*s)*g+(-e*s+u*c)*w+x*z;
     (f*c+v*s)*e+(-f*s+v*c)*u+x*y, (f*c+v*s)*f+(-f*s+v*c)*v+y^2, (f*c+v*s)*g+(-f*s+v*c)*w+y*z;
     (g*c+w*s)*e+(-g*s+w*c)*u+x*z, (g*c+w*s)*f+(-g*s+w*c)*v+y*z, (g*c+w*s)*g+(-g*s+w*c)*w+z^2]
  = [x^2*(1-c)+c, x*y*(1-c)-z*s, x*z*(1-c)+y*s;
     x*y*(1-c)+z*s, y^2*(1-c)+c, y*z*(1-c)-x*s;
     z*x*(1-c)-y*s, y*z*(1-c)+x*s, z^2*(1-c)+c]
 

只依赖于轴矢量和旋转角度,和曾经的那个公式相仿。

posted @ 2007-07-24 09:53  quanben  阅读(347)  评论(0编辑  收藏  举报