3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

NSAffineTransformのメモ

Last updated at Posted at 2014-04-27

場所をずらしながら繰り返し描画を行おうとして、 NSAffineTransformで原点移動すればいいじゃないかと思い実装して失敗した時のメモ。

サンプルのスクリーンショットは以下のとおり。左のようなものを作ろうとして正しく実装できたのが真ん中、勘違いで正しく描画出来てなかったのが右側。

2014_04_27_11_59.png

コード : https://github.com/Nunocky/AffineTransformStudy001

正しい書き方

    NSAffineTransform *trans1 = [NSAffineTransform transform];
    [trans1 translateXBy: 10 yBy: 10];
    
    [trans1 concat];
    [self drawLineWithColor:[NSColor redColor]];
    
    [trans1 concat];
    [self drawLineWithColor:[NSColor greenColor]];
    
     // .....

間違った書き方

    NSAffineTransform *trans = [NSAffineTransform transform];
    
    [self drawLineWithColor:[NSColor blackColor]];
    
    [trans translateXBy: 10 yBy: 10];
    [trans concat];
    [self drawLineWithColor:[NSColor redColor]];
    
    [trans translateXBy: 10 yBy: 10];
    [trans concat];
    [self drawLineWithColor:[NSColor greenColor]];
    
     // .....

反省

分かってしまえばそりゃそうだろってことなんだけど

  • NSAffineTransformは変換行列を定義するもの
  • concatメソッドは現在のコンテキストに対して座標変換を適用するもの。感覚的には [[NSColor blackColor] set]に近い。
  • translateXBy:yBy: メソッドは 座標変換の行列を追加するもの。間違った例のようにすると、変換行列 = A * A * A*.... とどんどんずれ幅が大きくなっていく。
3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?