三維座標系的旋轉矩陣

前言:非常感謝http://m.blog.csdn.net/blog/qiuqchen/21980731的總結和分享  ,讓我再一次詳細的學習了三維座標中的選擇矩陣推導過程。


爲了方便自己記憶,記錄一下三維座標旋轉矩陣的推導過程。


    座標的旋轉變換在很多地方都會用到,比如機器視覺中的攝像機標定、圖像處理中的圖像旋轉、遊戲編程等。

    任何維的旋轉可以表述爲向量與合適尺寸的方陣的乘積。最終一個旋轉等價於在另一個不同座標系下對點位置的重新表述。座標系旋轉角度θ則等同於將目標點圍繞座標原點反方向旋轉同樣的角θ。

    若以座標系的三個座標軸X、Y、Z分別作爲旋轉軸,則點實際上只在垂直座標軸的平面上作二維旋轉。

   假設三維座標系中的某一向量,其在直角座標系中的圖如圖1所示。其中點P在XY平面、XZ平面、YZ平面的投影分別爲點M、點P、點N。
                                                           
                                                                                            圖1 直角座標系XYZ
   一、繞Z軸旋轉θ
    繞Z軸旋轉,相當於在XY平面的投影OM繞原點旋轉,如下圖所示,OM旋轉θ角到OM'。

 圖4 向量繞Y軸旋轉示意圖
設旋轉前的座標爲,旋轉後的座標爲,則點M的座標爲,點M'的座標爲。由此可得:

                                                                      
                                                  
                                                        
                                                  
                                               
    對於進行三角展開可得:
                                              

                                              
    且有;可得繞Z軸旋轉角的旋轉矩陣爲:
                         
                                                                   

   二、繞X軸旋旋轉θ
   繞X軸旋轉,相當於在YZ平面的投影ON繞原點旋轉,如下圖所示,ON旋轉θ角到ON'。

  圖3 向量繞X軸旋轉示意圖

   設旋轉前的座標爲,旋轉後的座標爲,則點N的座標爲,點N'的座標爲。由此可得:

                                                                      
                                                  
                                                        
                                                  
                                               
    對於進行三角展開可得:
                                              

                                              
    且有;可得繞X軸旋轉角的旋轉矩陣爲:
                         
                                                                   

    三、繞Y軸旋旋轉θ
    繞Y軸旋轉,相當於在XZ平面的投影OQ繞原點旋轉,如下圖所示,OQ旋轉θ角到OQ'。

  圖4 向量繞Y軸旋轉示意圖

   設旋轉前的座標爲,旋轉後的座標爲,則點Q的座標爲,點Q'的座標爲。由此可得:

                                                                      
                                                  
                                                        
                                                  
                                               
    對於進行三角展開可得:
                                              

                                              
    且有;可得繞Y軸旋轉角的旋轉矩陣爲:
                         
                                                                   



    四、繞X、Y、Z軸旋轉的旋轉矩陣分別爲:
 
                               
                 

    五、總結
    
    囉囉嗦嗦終於打完所有的公式了,其實三個軸會推導其中一個軸的旋轉矩陣的話,另外兩個軸也類似地可以很容易推導出來。這裏給出所有的推導過程只是爲了我自己記憶的方便。當然也可以不旋轉向量,而使用旋轉座標系的方法推導,兩種方法是等價的。

    公式的輸入我使用了這篇博客http://blog.csdn.net/linraise/article/details/11712937給出的方法。還有一個小技巧,就是可以雙擊公式,在最上面的工具欄“圖片”選項裏直接修改公式的內容。

參考:
1、《學習OpenCV》
    
擴展:

在進行圖像程序開發的過程中,免不了要對圖像做各種變換處理。有的時候變換可能比較複雜,比如平移之後又旋轉,旋轉之後又平移,又縮放。

直接用公式計算,不但複雜,而且效率低下。這時可以藉助變換矩陣和矩陣乘法,將多個變換合成一個。 最後只要用一個矩陣對每個點做一次處理就可以得到想要的結果。

  另外,矩陣乘法一般有硬件支持,比如3D 圖形加速卡,處理3D變換中的大量矩陣運算,比普通CPU 要快上1000倍。

下面是3類基本的3D圖形變換: (2D圖形的變換相當於在3D的變換上減少一個維度即可)

一、平移:

設某點向x方向移動 dx, y方向移動 dy ,z方向移動dz, [x,y,z]爲變換前座標, [X,Y,Z]爲變換後坐標。

則 X = x+dx;  Y = y+dy; Z =z+dz

以矩陣表示:

其中即爲平移矩陣。



二、旋轉:

設某點與原點連線和X軸夾角爲度,以原點爲圓心,繞z軸逆時針旋轉度  , 原點與該點連線長度爲R, [x,y,z]爲變換前座標, [X,Y,Z]爲變換後坐標。



ZE

其中即爲旋轉矩陣。

同理,假如繞x軸旋轉度,則旋轉矩陣爲:


繞y軸旋轉度,則旋轉矩陣爲:


三、縮放:

 設某點座標,在x軸方向擴大 sx倍,y軸方向擴大 sy倍,z軸方向擴大sz倍,[x,y,z]爲變換前座標, [X,Y,Z]爲變換後坐標。

 X = sx*x; Y = sy*y; Z=sz*z



其中j即爲旋轉矩陣。


所以複雜的3D模型視圖變換都可以分解爲上述三種變換,注意矩陣相乘順序等於變換順序。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章