開始看蘋果官網(wǎng)文檔袜炕,記錄。
NSAffineTransform是個矩陣的變換
struct CGAffineTransform
{
CGFloat a, b, c, d;
CGFloat tx, ty;
};
看到這里一臉懵逼初家,好吧偎窘,先去查看下矩陣相關(guān)的東西(PS:我討厭這種東西,畢竟大學(xué)線性代數(shù)是我唯一掛的科溜在,呵呵??)
這玩意叫做齊次坐標陌知,將一個n維向量用一個n+1維來表示,引入齊次坐標的目的主要是合并矩陣運算中的乘法和加法掖肋,而矩陣的乘法加法就是我們可以對視圖做出包括但不限于平移纵诞,旋轉(zhuǎn),縮放等操作的基礎(chǔ)培遵。變換矩陣.png中可以看到第一行的都是齊次坐標。
第三列總是(0,0,1)登刺,用來作為坐標系的標準籽腕。所以所有的變化都由前兩列完成。
知道了什么是齊次坐標纸俭,接下來......
矩陣乘法
矩陣相乘最重要的方法是一般矩陣乘積皇耗。它只有在第一個矩陣的列數(shù)(column)和第二個矩陣的行數(shù)(row)相同時才有意義。一般單指矩陣乘積時揍很,指的便是一般矩陣乘積郎楼。一個m×n的矩陣就是m×n個數(shù)排成m行n列的一個數(shù)陣万伤。由于它把許多數(shù)據(jù)緊湊的集中到了一起,所以有時候可以簡便地表示一些復(fù)雜的模型呜袁。(百度復(fù)制粘貼??)
相對于的加法自行百度
概念結(jié)束敌买,直接運算原理:
原坐標設(shè)為[X , Y , 1 ](經(jīng)過歸一化處理后第三個數(shù)為1,至于什么是歸一化處理)
噥阶界,就是這個
好了虹钮,繼續(xù)
如果 a = d = 1 , b = c = 0
轉(zhuǎn)換之后坐標就變成(X + tx , Y +ty),即坐標進行了平移膘融。
如果 b = c = tx = ty = 0
轉(zhuǎn)換之后變成 (aX , dY , 1)芙粱,即坐標X按照a進行縮放,Y按照d進行縮放氧映。
如果 tx = ty = 0春畔,a = cos?,b = sin?岛都,c = -sin?律姨,d = cos?
轉(zhuǎn)換之后變成 [Xcos? - Ysin? , Xsin? + Ycos? , 1] ,?就是旋轉(zhuǎn)的角度疗绣,逆時針為正线召,順時針為負。
這樣就完成了這些平移多矮,旋轉(zhuǎn)缓淹,縮放等操作
代碼就不寫了,反正就是知道下原理塔逃,其實apple已經(jīng)在UIImageOrientation的枚舉里定義了好多變換讯壶,用著就行了。
over湾盗,明天聊聊 NSAttributedString