blog

CGAffineTransformMake(a,b,c,d,tx,ty) 行列演算の原理.

座標系における2次元グラフィックスの変化を統一するために、カイ2乗座標の概念が導入されます。つまり、グラフは3次元行列で表現され、3番目の列は常に座標系の基準として使われます。つまり、すべての変更は最...

Nov 25, 2020 · 2 min. read
シェア

CGAffineTransformMake(a,b,c,d,tx,ty)

a d ズーム b c 回転 tx ty 変位

の公式は

x' = ax + cy + tx 
y' = bx + dy + ty

行列の基本:

struct CGAffineTransform {
 CGFloat a, b, c, d;
 CGFloat tx, ty;
};

CGAffineTransform CGAffineTransformMake; CGAffineTransformMake

二次元の図形の変化を座標系で統一するために、カイ二乗座標の概念が導入されました。つまり、図形は三次元の行列で表され、三列目は常に座標系の基準として使用されます。つまり、すべての変更は最初の2列によって行われます。

上記のパラメータは、マトリックスで次のように表されます:

動作原理:元の座標を

 | a b 0 |
(X,Y, 1)  | c d 0 | = (aX + cY + tx , bX + dY + ty , 1) ;
 | tx ty 1 |

行列演算の座標は、互いに比較することでわかります:

i.a=d=1, b=c=0 とします

=

この時、座標はベクトル

つまり,関数CGAffineTransform CGAffineMakeTranslation(CGFloat tx,CGFloat ty) の計算原理です.

b = c = tx = ty = 0 とします

=

この時、座標Xはaに従ってスケーリングされ、Yはdに従ってスケーリングされることがわかります。

すなわち,関数CGAffineTransform CGAffineTransformMakeScale(CGFloat sx, CGFloat sy) の計算原理.

aはsx、dはsyに対応します。

tx=ty=0, a=cosβ, b=sinβ, c=-sinβ, d=cosβ とします

=

この時、βは回転角で、反時計回りが正、時計回りが負であることがわかります。

つまり,関数CGAffineTransform CGAffineTransformMakeRotation(CGFloat angle) の計算原理です.

角度、すなわちβのラジアン表示。

Read next

codemirror + react + jsonlint jsonビジュアルエディタを構築する。

ビジネス上の問題を解決します: ユーザーはjsonを編集する必要があり、jsonのチェックサムをカスタマイズする必要があります。

Nov 25, 2020 · 3 min read