Android圖形變換——Matrix學習

說到Android的圖形變換就不得不提Matrix,包括安卓在內的很多計算機圖形的變換都是基於矩陣來進行的,常規的操作如平移,旋轉,縮放等操作,都是通過矩陣之間的相加,前乘、後乘來實現的。

那麼首先,我們就必須知道,爲什麼Android中的Matrix是一個3*3的座標系,而不是4*4或者2*2呢。我們知道,如果要實現平移變換,只需要對對象的x,y值進行操作即可

 寫成矩陣的形式就是

 那麼如果想要實現縮放呢

可以看到,縮放其實就是對x和y值進行了一定係數的放大,這裏就引入了二維座標系

同理,針對圖形的旋轉操作 

 就是對X,Y值進行了三角函數運算

那如果,想要同時實現旋轉,縮放和平移怎麼辦,對象平移是加法,而旋轉和縮放使用的是乘法。

劃重點:那麼有沒有一種方法能同時實現旋轉、縮放、平移呢?

這裏,計算機圖形學中採用的是升維的方法,就是把二維座標轉換爲三維座標

這樣,平移操作就可以表示成:

同理,縮放和旋轉:

 

 

這就是引入齊次座標的作用把各種變換都統一了起來,即 把縮放,旋轉,平移等變換都統一起來,都表示成一連串的矩陣相乘的形式。保證了形式上的線性一致性。

至於爲什麼在X,Y後面添加了1而矩陣不變?這就是齊次座標系的原因了

對於Android來說,也是同樣的道理。這裏,還是不免俗套地祭出谷歌的經典圖

這裏寫圖片描述

 通過字面的意思我們也能大概猜測出來每個元素代表的意思,其中,這個矩陣是通過bitmap的getmatrix得到的,而且在每個手機中的數值都不同,當我想去探究這個矩陣是如何生成時,奈何底層是c實現的,我們不得而知。

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