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