說到Android的圖形變換就不得不提Matrix,包括安卓在內的很多計算機圖形的變換都是基於矩陣來進行的,常規的操作如平移,旋轉,縮放等操作,都是通過矩陣之間的相加,前乘、後乘來實現的。
那麼首先,我們就必須知道,爲什麼Android中的Matrix是一個3*3的座標系,而不是4*4或者2*2呢。我們知道,如果要實現平移變換,只需要對對象的x,y值進行操作即可
寫成矩陣的形式就是
那麼如果想要實現縮放呢
可以看到,縮放其實就是對x和y值進行了一定係數的放大,這裏就引入了二維座標系
同理,針對圖形的旋轉操作
就是對X,Y值進行了三角函數運算
那如果,想要同時實現旋轉,縮放和平移怎麼辦,對象平移是加法,而旋轉和縮放使用的是乘法。
劃重點:那麼有沒有一種方法能同時實現旋轉、縮放、平移呢?
這裏,計算機圖形學中採用的是升維的方法,就是把二維座標轉換爲三維座標
這樣,平移操作就可以表示成:
同理,縮放和旋轉:
這就是引入齊次座標的作用,把各種變換都統一了起來,即 把縮放,旋轉,平移等變換都統一起來,都表示成一連串的矩陣相乘的形式。保證了形式上的線性一致性。
至於爲什麼在X,Y後面添加了1而矩陣不變?這就是齊次座標系的原因了
對於Android來說,也是同樣的道理。這裏,還是不免俗套地祭出谷歌的經典圖
通過字面的意思我們也能大概猜測出來每個元素代表的意思,其中,這個矩陣是通過bitmap的getmatrix得到的,而且在每個手機中的數值都不同,當我想去探究這個矩陣是如何生成時,奈何底層是c實現的,我們不得而知。