繞任意軸旋轉

2021-09-08 14:54:06 字數 1388 閱讀 4159

關於最常見的繞座標軸旋轉,可以看看前一篇-幾何變換詳解。

繞任意軸旋轉的情況比較複雜,主要分為兩種情況,一種是平行於座標軸的,一種是不平行於座標軸的,對於平行於座標軸的,我們首先將旋轉軸平移至與座標軸重合,然後進行旋轉,最後再平移回去。

整個過程就是

對於不平行於座標軸的,可按如下方法處理。(該方法實際上涵蓋了上面的情況)

將旋轉軸平移至原點

將旋轉軸旋轉至yoz平面

將旋轉軸旋轉至於z軸重合

繞z軸旋轉θ度

執行步驟3的逆過程

執行步驟2的逆過程

執行步驟1的逆過程

假設用v1(a1, b2, c2)和v2(a2, b2, c2)來表示旋轉軸,θ表示旋轉角度。為了方便推導,暫時使用右手系並使用列向量,待得出矩陣後轉置一下即可,上面步驟對應的流程圖如下。

步驟1是乙個平移操作,將v1v2平移至原點,對應的矩陣為

步驟2是乙個旋轉操作,將p(p = v2 -v1)旋轉至xoz平面,步驟3也是乙個旋轉操作,將p旋轉至與z軸重合,這兩個操作對應的圖如下。

做點p在平面yoz上的投影點q。再過q做z軸垂線,則r是p繞x軸旋轉所得,且旋轉角度為α,且

於是旋轉矩陣為

現在將r繞y軸旋轉至與z軸重合,旋轉的角度為-beta(方向為順時針),且

於是得到旋轉矩陣為

最後是繞z軸旋轉,對應的矩陣如下

如果旋轉軸是過原點的,那麼第一步和最後一步的平移操作可以省略,也就是把中間五個矩陣連乘起來,再轉置一下,得到下面的繞任意軸旋轉的矩陣

對應的函式**如下。

void rotatearbitraryaxis(d3dxmatrix* pout, d3dxvector3* axis, float

theta)

繞任意軸旋轉

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

繞任意軸旋轉

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

繞任意軸旋轉

1.向量f為旋轉軸 2.向量ac 為旋轉後的向量 3.向量ac為旋轉前的向量 1.求出向量ab 向量ab 向量ac dot 向量af x 向量af 2.求出向量bc 向量bc 向量bz sin theta 向量bc cos theta 向量bz 向量af x 向量bc 向量af x 向量ac 向量b...