1. 程式人生 > >旋轉矩陣座標變換

旋轉矩陣座標變換

轉自https://www.cnblogs.com/zhoug2020/p/7864898.html

座標系旋轉變換公式圖解

而您一旦用以下這圖解方法,隨時眼見顯然,再也不會搞錯。

 

 

 

平時開發程式,免不了要對影象做各種變換處理。有的時候變換可能比較複雜,比如平移之後又旋轉,旋轉之後又平移,又縮放。

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

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

下面是3類基本的2D圖形變換。 

平移:

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

則 X = x+dx;  Y = y+dy;

以矩陣表示:

                                1    0    0

[X, Y, 1] = [x, y, 1][ 0    1    0  ] ; 

                               dx  dy   1

  1    0    0

  0    1    0   即平移變換矩陣。 

  dx  dy   1 

 

 旋轉:

 旋轉相比平移稍稍複雜:

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

  x = Rcos(b) ; y = Rsin(b);

  X = Rcos(a+b) = Rcosacosb - Rsinasinb = xcosa - ysina; (合角公式)

  Y = Rsin(a+b) = Rsinacosb + Rcosasinb = xsina + ycosa ;


  用矩陣表示:

                                cosa   sina  0

 [X, Y, 1] = [x, y, 1][-sina  cosa  0  ] 

                                 0        0     1

  cosa   sina  0

 -sina  cosa  0  為旋轉變換矩陣。

   0       0     1 

 

 縮放

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

 X = sx*x; Y = sy*y;

則用矩陣表示:

                                sx    0    0

[X, Y, 1] = [x, y, 1][ 0    sy    0  ] ; 

                                0     0     1

 sx    0    0

 0    sy    0  即為縮放矩陣。 

 0     0     1

 

 2D基本的模型檢視變換,就只有上面這3種,所有的複雜2D模型檢視變換,都可以分解成上述3個。

比如某個變換,先經過平移,對應平移矩陣A, 再旋轉, 對應旋轉矩陣B,再經過縮放,對應縮放矩陣C.

則最終變換矩陣 T = ABC. 即3個矩陣按變換先後順序依次相乘(矩陣乘法不滿足交換律,因此先後順序一定要講究)。

                </div></div><div id="MySignature"></div>
分類: [020] 數學 好文要頂 關注我 收藏該文 莫水千流
關注 - 38
粉絲 - 121 +加關注 0 0 « 上一篇: 左手座標系和右手座標系 ZZ
» 下一篇: 向量面積
<div class="postDesc">posted on <span id="post-date">2017-11-20 09:20</span> <a href="https://www.cnblogs.com/zhoug2020/">莫水千流</a> 閱讀(<span id="post_view_count">7444</span>) 評論(<span id="post_comment_count">1</span>)  <a href="https://i.cnblogs.com/EditPosts.aspx?postid=7864898" rel="nofollow">編輯</a> <a href="#" onclick="AddToWz(7864898);return false;">收藏</a></div>

平時開發程式,免不了要對影象做各種變換處理。有的時候變換可能比較複雜,比如平移之後又旋轉,旋轉之後又平移,又縮放。

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

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

下面是3類基本的2D圖形變換。 

平移:

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

則 X = x+dx;  Y = y+dy;

以矩陣表示:

                                1    0    0

[X, Y, 1] = [x, y, 1][ 0    1    0  ] ; 

                               dx  dy   1

  1    0    0

  0    1    0   即平移變換矩陣。 

  dx  dy   1 

 

 旋轉:

 旋轉相比平移稍稍複雜:

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

  x = Rcos(b) ; y = Rsin(b);

  X = Rcos(a+b) = Rcosacosb - Rsinasinb = xcosa - ysina; (合角公式)

  Y = Rsin(a+b) = Rsinacosb + Rcosasinb = xsina + ycosa ;


  用矩陣表示:

                                cosa   sina  0

 [X, Y, 1] = [x, y, 1][-sina  cosa  0  ] 

                                 0        0     1

  cosa   sina  0

 -sina  cosa  0  為旋轉變換矩陣。

   0       0     1 

 

 縮放

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

 X = sx*x; Y = sy*y;

則用矩陣表示:

                                sx    0    0

[X, Y, 1] = [x, y, 1][ 0    sy    0  ] ; 

                                0     0     1

 sx    0    0

 0    sy    0  即為縮放矩陣。 

 0     0     1

 

 2D基本的模型檢視變換,就只有上面這3種,所有的複雜2D模型檢視變換,都可以分解成上述3個。

比如某個變換,先經過平移,對應平移矩陣A, 再旋轉, 對應旋轉矩陣B,再經過縮放,對應縮放矩陣C.

則最終變換矩陣 T = ABC. 即3個矩陣按變換先後順序依次相乘(矩陣乘法不滿足交換律,因此先後順序一定要講究)。

                </div></div><div id="MySignature"></div>