旋轉矩陣座標變換
轉自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>