開頭
這篇博客,是參考了文章:Android Matrix,這篇文章有具體的分析過程和android實例。我只是參考和根據自己的理解寫的。
在Android中,我們可以從數學的角度來看顏色和動畫的變換。這裏會從矩陣變換的角度來理解平移,旋轉,縮放,對稱的變換。
這些變換的完成實際上,是操作一個3X3的矩陣的。而這四種基本變換與操作和這個矩陣有什麼樣的關係呢?下面會分析。
在Android中,已經爲每種變換提供了pre、set和post三種操作方式。
set 用於設置Matrix中的值。
pre 是先乘,因爲矩陣的乘法不滿足交換律,因此先乘、後乘必須要嚴格區分。先乘相當於矩陣運算中的右乘。
post 是後乘,因爲矩陣的乘法不滿足交換律,因此先乘、後乘必須要嚴格區分。後乘相當於矩陣運算中的左乘。
另外,除平移變換(Translate)外,旋轉變換(Rotate)、縮放變換(Scale)和錯切變換(Skew)都可以圍繞一箇中心點來進行,如果不指定,在默認情況下是圍繞(0, 0)來進行相應的變換的。
平移變換
假設座標系中有A和B兩個點,從A平移到B點,它們之間的關係上圖所示。
在x和y軸的移動增量分別是:
則易得:
它的矩陣表示爲:
旋轉變換
1、圍繞座標原點旋轉
由A點順時針旋轉一定角度到B點,如圖所示。
由圖易知:
由上面四個式子,可得:
矩陣表示,得:
旋轉變換
2、圍繞某點旋轉
假設旋轉點是:
順時針旋轉,結合1、上面的推導結果,可以得到矩陣:
可以化爲:
可知,圍繞某一點進行旋轉變換,可以分成3個步驟,即首先將座標原點移至該點,然後圍繞新的座標原點進行旋轉變換,再然後將座標原點移回到原先的座標原點。
縮放變換
A點的x,y座標分別放大a,b倍。則有一下關係:
用三維矩陣表示爲:
對稱變換
1、如果對稱軸是x軸,則有:
用三維矩陣表示爲:
2、如果對稱軸是y軸,則有:
用三維矩陣表示爲:
3、如果對稱軸是y = x軸,如圖
由等腰直角三角形可知:
已知中點在對稱軸上,由中點座標公式,易得:
聯合兩式子,2式先乘以2,再兩式相加和相減,可得:
用三維矩陣表示爲:
4、如果對稱軸是y = -x軸。
同理,易推導得:
5、如果對稱軸是y = kx時。如圖
由圖易知:
則有:
由直線的斜率公式,可得:
中點座標在直線上,結合中點座標公式,易得:
由上面兩式,可求得:
用三維矩陣表示爲:
k爲任意實數,可以取特殊的值,驗證前面對稱推導的結果。k爲1或者-1時,k爲0時,k爲無窮大時等等。
6、如果對稱軸是y = kx + b時
只需要在5的基礎上增加兩次平移變換即可,即先將座標原點移動到(0, b),然後做上面的關於y = kx的對稱變換,再然後將座標原點移回到原來的座標原點即可。用矩陣表示大致是這樣的: