空間三維點繞任意空間直線旋轉

2021-07-24 14:27:17 字數 1352 閱讀 6509

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

整個過程就是

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

將旋轉軸平移至原點

將旋轉軸旋轉至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)

三維空間的繞軸旋轉變換

最近在看文獻的時候看到作者有用到三維繞軸變換。我看了好久都沒摸清他的矩陣是怎麼得到的。待我提筆一畫,媽呀,果然這腦子是廢了,這麼easy的問題都他麼的解不出來。既然腦子廢了那手還是勤勞點把。嘆氣。唉,豬生艱難。我只想過吃完就睡睡完就吃的生活啊!為什麼要這麼torture我。咳,言歸正傳。首先出乙個清...

三維空間剛體旋轉

剛體 運動過程中不會產生形變的物體,運動過程中同乙個向量的長度和夾角都不會發生變化。剛體變換也稱為歐式變換。旋轉矩陣 四元數旋轉向量 尤拉角安裝方式 eigen庫只有標頭檔案,沒有.so和.a二進位制檔案,所以在cmakelists.txt中只需要新增標頭檔案路徑,並不需要使用target link...

三維空間裡乙個點繞座標軸旋轉

在三維空間裡乙個點繞x軸 y軸 z軸旋轉一定弧度後新的點的座標是容易計算的,問題是如果它所繞的旋轉軸是乙個任意向量 x,y,z 的話,怎麼知道旋轉angle弧度後新的點的座標呢?在opengl裡有乙個函式glrotatef angle,x,y,z 可以實現此功能,它的實現是左乘乙個矩陣 x2 1 c...