アフィン変換の話 宇佐見 公輔
アフィン変換の話宇佐見 公輔
どこで出てくるか
ビューを変形する• iOS での例 : CGAffineTransform
• UIView の transform プロパティ:平行移動、拡大縮小、回転、など
フォントを変形する• CTFontCreate の引数に渡す : 斜体フォントを作る
アフィン変換は 図形の変形に使われている
図形の変形
図形の変形• 合同変換(ユークリッド変換)
• 相似変換
• アフィン変換
• 射影変換
合同変換• 平行移動、回転、反転
• 長さを保つ
• 角度を保つ
• → 図形の形や大きさを変えない
相似変換• 合同変換 + 拡大・縮小
• 長さの比を保つ(長さを保たない)
• 角度を保つ
• → 図形の形を変えない(大きさは変わる)
アフィン変換• 相似変換 + 剪断変形(正方形を菱形に)
• 長さの比を保つ
• 平行性を保つ(直角性を保たない)
• → 図形の形が変わる(斜めになる)
射影変換• アフィン変換 + 扇形変形
• 長さの比を保たない
• 直線性を保つ(平行性・直角性を保たない)
• → 図形の形が変わる
アフィン変換のイメージ形は変わるけど、平行なものは平行なまま
アフィン変換 = 平行移動、回転、反転、 拡大縮小、剪断
変換の数式
Lightning Talk なので軽めに
回転の数式
✓x
0
y
0
◆=
✓cos(t) � sin(t)
sin(t) cos(t)
◆✓x
y
◆
平行移動+回転の数式
✓x
0
y
0
◆=
✓cos(t) � sin(t)
sin(t) cos(t)
◆✓x
y
◆+
✓e
f
◆
アフィン変換の数式
✓x
0
y
0
◆=
✓a b
c d
◆✓x
y
◆+
✓e
f
◆
変換の合成 (行列表現のメリット)
✓a1 b1c1 d1
◆✓a2 b2c2 d2
◆
同次座標による表現 (平行移動も行列に含める)0
@x
0
y
0
1
1
A =
0
@a b e
c d f
0 0 1
1
A
0
@x
y
1
1
A
まとめ
アフィン変換は 簡単に使えて便利なので 知っておくとよい