CGAffineTransform

2010. 10. 19
●概要

CGAffineTransformデータ構造体は、アフィン変換を使った行列を表します。

アフィン変換は、ある座標系の点を指定して、別の座標系に点をマッピングすることです。

アフィン変換は特別なマッピング方法で、長さや角度を維持した平行移動のことですが、必ずしもそうとは限りません。

アフィン変換は平行移動だけでなく、スケーリング(拡大/縮小)、回転といった操作をサポートしていて一般的によく使われますが、斜めに(平行四辺形のように、相対する二辺が平行を維持した変形)することもできます。

QuartzはCGAffineTransformデータ構造体を使って、アフィン変換の生成、連結、適用をする関数を提供します。

アフィン変換関数の使用法についての情報は『Quartz 2D Programming Guide』を参照してください。

通常はアフィン変換を直接生成する必要はありません。

現在のアフィン変換を修正する関数はCGContextに表されています。

アフィン変換を再利用する予定が無い場合は、CGContextScaleCTMCGContextRotateCTMCGContextTranslateCTM、またはCGContextConcatCTMを使用することができます。



●タスク

●アフィン変換行列の生成

CGAffineTransformMake
CGAffineTransformMakeRotation
CGAffineTransformMakeScale
CGAffineTransformMakeTranslation

●アフィン変換の変更

CGAffineTransformTranslate
CGAffineTransformScale
CGAffineTransformRotate
CGAffineTransformInvert
CGAffineTransformConcat

●アフィン変換の適用

CGPointApplyAffineTransform
CGSizeApplyAffineTransform
CGRectApplyAffineTransform

●アフィン変換の評価

CGAffineTransformIsIdentity
CGAffineTransformEqualToTransform



●関数

CGAffineTransformIsIdentity

bool CGAffineTransformIsIdentity (
    CGAffineTransform t
);

アフィン変換が適用されていないものかをチェックします。

tが適用されていない場合はtrue、それ以外はfalseを返します。

t:チェックするアフィン変換を指定します。


CGAffineTransformMakeRotation

CGAffineTransform CGAffineTransformMakeRotation (
    CGFloat angle
);

提供した値で回転させたアフィン変換行列を返します。

この関数はCGAffineTransform構造体を生成し、座標系の回転に使用(必要なら再使用)することができます。

行列は以下のような形式になっています。

448

実際の回転の方向は、ターゲットとなるプラットフォームの座標系に依存し、iPhone OSとMac OS Xでは異なります。

この関数で返されるCGAffineTransformデータ構造体は、最初の二つの列のみに値が含まれるため、三列目は常に (0, 0, 1) です。

これらの方程式の結果は、Quartzが点 (x, y) の回転を適用するのに使用します。

449

回転させたオブジェクトを描画にのみ使う場合は、アフィン変換を構成する必要はありません。

回転させた描画を行う最も直接的な方法は、CGContextRotateCTM関数を呼び出すことです。

angle:この行列で回転させる座標系軸の角度をラジアンで指定します。
iPhone OSでは正の値を指定すると反時計回りに回転し、負の値を指定すると時計回りに回転します。
Mac OS Xでは正の値を指定すると時計回りに回転し、負の値を指定すると反時計回りに回転します。


CGAffineTransformScale

CGAffineTransform CGAffineTransformScale (
    CGAffineTransform t,
    CGFloat sx,
    CGFloat sy
);

現在のアフィン変換をスケーリングしたアフィン変換行列を返します。

この関数は、現在のアフィン変換の値にスケーリングした値を追加した、新しいアフィン変換行列の生成に使用します。

新しいアフィン変換は、座標系の拡大縮小に使用(必要なら再使用)することができます。

t:現在のアフィン変換を指定します。

sx:拡大縮小するアフィン変換のx値を指定します。

sy:拡大縮小するアフィン変換のy値を指定します。



●データ型

CGAffineTransform

アフィン変換行列を保持する構造体です。

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

a:行列の[1, 1]の位置のエントリを指定します。

b:行列の[1, 2]の位置のエントリを指定します。

c:行列の[2, 1]の位置のエントリを指定します。

d:行列の[2, 2]の位置のエントリを指定します。

tx:行列の[3, 1]の位置のエントリを指定します。

ty:行列の[3, 2]の位置のエントリを指定します。


Quartz 2Dでは、グラフィックスコンテキストの描画で、オブジェクトを回転、拡大縮小、平行移動、または斜めにするためにアフィン変換を使用します。

CGAffineTransform型は、アフィン変換を作成、連結、適用するための関数を提供します。

Quartzでは、アフィン変換は3×3の行列で表されます。

equation01


3列目は常に(0, 0, 1)であるため、CGAffineTransformのデータ構造体には1列目と2列目のみに値が含まれます。

概念的にはQuartzのアフィン変換は、この行列によって描画する各点(x, y)を表す行ベクトルを乗算し、対応する点(x', y')を表すベクトルを生成します。

equation02

3×3行列では、Quartzはある座標系の点(x, y)を別の座標系の点(x', y')に変換するために次の式を使用します。

equation03

行列は『リンク』することによって、ある座標系の点を別の点へとどのようにマッピングするかを指定します。

通常、アフィン変換を直接生成する必要が無いことに注意してください。

例えばオブジェクトを拡大縮小または回転した描画だけをする場合は、アフィン変換を構築する必要はありません。

描画を直接的な方法で移動や拡大縮小、または回転するには、関数CGContextTranslateCTMCGContextScaleCTM、またはCGContextRotateCTMをそれぞれ呼び出して操作します。

後で再利用する場合には、一般的にはアフィン変換を生成する必要があります。



●定数

CGAffineTransformIdentity

const CGAffineTransform CGAffineTransformIdentity;

恒等変換。
※ 無変換のアフィン変換

450



参考文献

CGAffineTransform Reference






SoundSport Pulse wireless headphones
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
04 | 2017/05 | 06
Sun Mon Tue Wed Thu Fri Sat
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ。

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

SoundSport Pulse wireless headphones
Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR