從矩陣來看Android中的一些動畫變換


博客:http://zhangsunyucong.top

開頭

這篇博客,是參考了文章: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的對稱變換,再然後將座標原點移回到原來的座標原點即可。用矩陣表示大致是這樣的:
圖片

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章