2009-08-11 9 views
20

私はCALayerの変換プロパティの後ろにある行列にm14、m21、m22などのフィールドがあることをappleの一部の文書で見てきました。私はまた、1〜2ヶ月前に、これらのフィールドを説明するテーブルを見たことを覚えています。私はそれを見つけようと努力しました。誰もが情報源を知っていますか?すべての変換マトリックスフィールドの説明はどこで見つけることができますか?

答えて

43

その構造体は次のようになります。

struct CATransform3D 
{ 
    CGFloat m11, m12, m13, m14; 
    CGFloat m21, m22, m23, m24; 
    CGFloat m31, m32, m33, m34; 
    CGFloat m41, m42, m43, m44; 
}; 
typedef struct CATransform3D CATransform3D; 

これは単純に4×4は4ベクトルを変換するために使用変換行列です。任意の数の線形変換を表すために使用できます。このタイプの行列については、thisウィキペディアの記事を参照してください。それらの要素のほとんどは、実際に独立して解釈することはできませんが、いくつかすることができます。たとえば、m41、m42、およびm43は3空間の翻訳を表します。だから、例えばあなたは、この行列でポイントを掛ける場合:

[ 1 0 0 0 ] 
[ 0 1 0 0 ] 
[ 0 0 1 0 ] 
[ 1 2 3 1 ] 

は、その後、それは、+ X方向へ1 2つの+ Y方向へのユニット、および+ Z方向へ3をそのポイントを変換します。

    [ 1 0 0 0 ] 
[ x y z 1 ] x [ 0 1 0 0 ] = [ x+1 y+2 z+3 1 ] 
        [ 0 0 1 0 ] 
        [ 1 2 3 1 ] 

点は第4要素が1であると4ベクトルとして表現されなければならないことに注意してくださいまた、このベクターは、実際マトリックス自体であり、この行列の形式は、Wikipediaの記事に記載されたものと異なることに注意してください変換マトリックス上にある。これは、ポイントは通常、単一の列、4行の行列で表されるためですが、Appleはそれらを4列の単一行の行列として表現するためです。つまり、ウィキペディアの記事に表示されているトランスフォームマトリックスは、正しく動作させるためにiPhoneで使用する前にトランスポーズする必要があります。

別の例は、スケーリング変換である:

[ 2 0 0 0 ] 
[ 0 2 0 0 ] 
[ 0 0 2 0 ] 
[ 0 0 0 1 ] 

それは二重すべての点の座標のため、(1、2、3)(6、4、2)となるであろうであろう。回転や透視投影などの他の変換は、視覚的に認識することがより困難です。

アップルのtransformsに関する詳しい情報はこちらです。 Appleがこれらの行列を生成するためのユーティリティ変換を提供しています(this linkを参照)。彼らは実際にCATransform3DMakeRotationの背後にある数学については議論しませんが、this linkはそうします。

+1

これは大きな説明ですが、私はあなたの軸が転置されていると思います。 X、Y、Zの変換値はm41、m42、m43で表され、m14、m24、m34では表されません。 –

+0

@NickLockwood良いキャッチ、私はそれに応じて説明を更新しました。 – Gabe

関連する問題