繞軸旋轉問題

2022-04-06 05:19:28 字數 1063 閱讀 7382

在圖形學座標變換中,繞軸旋轉是非常重要和常見的,例如在生成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]

只依賴於軸向量和旋轉角度,和曾經的那個公式相仿。

繞任意軸旋轉

關於最常見的繞座標軸旋轉,可以看看前一篇 幾何變換詳解。繞任意軸旋轉的情況比較複雜,主要分為兩種情況,一種是平行於座標軸的,一種是不平行於座標軸的,對於平行於座標軸的,我們首先將旋轉軸平移至與座標軸重合,然後進行旋轉,最後再平移回去。整個過程就是 對於不平行於座標軸的,可按如下方法處理。該方法實際上...

繞任意軸旋轉

繞任意軸旋轉 關於最常見的繞座標軸旋轉,可以看看前一篇 幾何變換詳解。繞任意軸旋轉的情況比較複雜,主要分為兩種情況,一種是平行於座標軸的,一種是不平行於座標軸的,對於平行於座標軸的,我們首先將旋轉軸平移至與座標軸重合,然後進行旋轉,最後再平移回去。整個過程就是 對於不平行於座標軸的,可按如下方法處理...

繞任意軸旋轉

關於最常見的繞座標軸旋轉,可以看看前一篇 幾何變換詳解。繞任意軸旋轉的情況比較複雜,主要分為兩種情況,一種是平行於座標軸的,一種是不平行於座標軸的,對於平行於座標軸的,我們首先將旋轉軸平移至與座標軸重合,然後進行旋轉,最後再平移回去。整個過程就是 對於不平行於座標軸的,可按如下方法處理。該方法實際上...