绕轴旋转问题
在图形学坐标变换中,绕轴旋转是非常重要和常见的,例如在生成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]
只依赖于轴矢量和旋转角度,和曾经的那个公式相仿。