CGAffineTransform的矩陣變換

CGAffineTransform介紹

  • CGAffineTransform數(shù)據(jù)結(jié)構(gòu)表示用于仿射變換的矩陣。 transformation制定了如何將一個坐標系的點映射到另一個坐標系上。一個仿射變換是一種特殊類型的映射,保留一條平行線,但不一定保留長度或角度??s放,旋轉(zhuǎn),位置變化是最常用的操作支持的仿射變換,但扭曲也是可能的。

Quartz提供了創(chuàng)建、連接和用CGAffineTransform實現(xiàn)的transformations的函數(shù)。想獲得更多信息,請參考Quartz 2D Programming Guide.

我們通常不需要直接創(chuàng)建一個仿射變換-- CGContext Reference描述了一個函數(shù)修改當前的放射變化。 但是如果你不想f復用仿射變化,你需要用到CGContextScaleCTM, CGContextRotateCTM, CGContextTranslateCTM, or CGContextConcatCTM.

函數(shù)

  • 創(chuàng)建放射變換矩陣

    1. CGAffineTransformMake:

      • CGAffineTransform CGAffineTransformMake ( CGFloat a, CGFloat b, CGFloat c, CGFloat d, CGFloat tx, CGFloat ty );

      • 參數(shù)在矩陣中表示如圖:
        img
        img
      • 這個方法創(chuàng)建了 CGAffineTransform結(jié)構(gòu)體,描述了新的矩陣變換。你可以用(或復用,如果你想的話),去改變一個坐標系。 由于第三列為 [0,0,1],因此矩陣變化起作用只有前兩列。

      • 如果你想transform一個對象,沒必要使用這個函數(shù)。因為有很多更直接的方法。

      • 矩陣的原理:

        假設(shè)原坐標點為(X,Y,1)

        
                                |a    b    0|
              [X,Y,  1]        |c    d    0|     =     [aX + cY + tx   >bX + dY + ty  1] ;
                                |tx   ty  1|
          
        

        得到結(jié)果是: [ (aX+cY+tx) (bX+dY+ty) 1] ;

        1.平移: a=d=1, b=c=0 -> [x + tx , y + ty] 這也就是CGAffineMakeTranslation的原理

        2.縮放: b=c=tx=ty=0. [ax dy 1] 這也就是CGAffineTransformMakeScale的原理

        3.旋轉(zhuǎn):設(shè)tx=ty=0,a=cos?,b=sin?,c=-sin?,d=cos?。 [aX + cY + tx bX + dY + ty 1] = [Xcos? - Ysin? Xsin? + Ycos? 1] ; 可見,這個時候,?就是旋轉(zhuǎn)的角度,逆時針為正,順時針為負。其實這也就是函數(shù)。 CGAffineTransformMakeRotation(CGFloat angle)的計算原理

    2. CGAffineTransformMakeRotation: 旋轉(zhuǎn)

    3. CGAffineTransformMakeScale:scale

    4. CGAffineTransformMakeTranslation

  • 修改變換矩陣: 對已經(jīng)存在的矩陣變化進行修改

    1. CGAffineTransformTranslate: 對橫豎位置進行修改
    2. CGAffineTransformScale
    3. CGAffineTransformRotate
    4. CGAffineTransformInvert:根據(jù)已經(jīng)存在的仿射變換進行變換
      -CGAffineTransform CGAffineTransformInvert ( CGAffineTransform t );
    5. CGAffineTransformConcat:合并兩個變換
  • Applying Affine Transformations

    • CGPointApplyAffineTransform 返回矩陣變換后的點的信息

      • CGPoint CGPointApplyAffineTransform ( CGPoint point, CGAffineTransform t );
    • CGSizeApplyAffineTransform

    • CGRectApplyAffineTransform

  • Evaluating Affine Transforms 評測

    • CGAffineTransformIsIdentity 是否是CGAffineTransformIsIdentity
      • CGAffineTransformIdentity, 即單位矩陣
        img
        img
    • CGAffineTransformEqualToTransform 檢驗變換是否是一樣
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容