轉自:https://jingyan.baidu.com/article/2c8c281dfbf3dd0009252a7b.html
http://www.fjutacm.com/Problem.jsp?pid=2566
一,在平面中,一個點繞任意點旋轉θ度后的點的坐標
假設對二維空間上任意點(x1,y1),繞一個坐標點(x0,y0)逆時針旋轉a角度后的新的坐標設為(x2, y2),有公式:
x2= (x1 - x0)*cos(a) - (y1 - y0)*sin(a) + x0 ;
y2= (x1 - x0)*sin(a) + (y1 - y0)*cos(a) + y0 ;
由該公式易得,
1,當順時針旋轉時,只需要將 a 變成 -a 就可以了
2,當 a 為 90度時 ,
x2 = - ( y1 - y0 ) +x0
y2 = x1 - x0 + y0
3,當 a 為 90度時 ,
x2 = ( y1 - y0 ) +x0
y2 = - ( x1 - x0 ) + y0
4, 當坐標軸,以向右為 x 軸正向 ,向下 軸為 y 軸 時,依然是順時針有
x2= (x1 - x0)*cos(a) + (y1 - y0)*sin(a) + x0 ;
y2= (x1 - x0)*sin(a) - (y1 - y0)*cos(a) + y0 ;
y 都變成 -y,但是 最后加上 x0,y0 的不能改,這是旋轉點的坐標,不能改,
而前面的是 改變量 ,運算時要要考慮到坐標,所以需要更改。
二 ,矩陣與坐標轉換
關於上面公式的推導可以在最上面的百度鏈接里面看到,反正我是沒去看證明,
看上去好麻煩,不過如果用矩陣去證明的話,還是比較簡單的,
畢竟,矩陣創造出來就是用來解決線性代換的問題。
三大基礎初等坐標變化包括
1,旋轉變換:

2,伸縮變換:

3,平移變換:

其他任意初等坐標變換的都可以由這三個變換經有限次復合得到。
所以任意初等變化都可以表示成以下形式

比如繞着(a,b)順時針旋轉θ可以看成,平移(-a,-b),旋轉θ,平移(a,b)這三步復合得到,即:

即 :
所以該式展開就是上面的:
x2= (x1 - x0)*cos(a) - (y1 - y0)*sin(a) + x0 ;
y2= (x1 - x0)*sin(a) + (y1 - y0)*cos(a) + y0 ; 只不過是符號換了一下
再比如,以(a,b)為中心,橫坐標擴大n倍,縱坐標擴大m

總結:任意初等坐標變換的實現可以用矩陣來表示。
========== ========= ======== ======== ======= ===== ==== === == =
一個男人生前要達到什么程度的不可一世,才能避免死於無名? ——《陳二狗的妖孽人生》
