アップルのいくつかのドキュメントで、CALayerの変換プロパティの背後にあるマトリックスにm14、m21、m22などのフィールドがあることがわかりました。また、約1、2か月前に、これらのフィールドを説明する表を見たことを覚えています。私はそれを見つけるのに苦労しました。誰かが情報源を知っていますか?
1 に答える
その構造体は次のようになります。
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-ベクトルの変換に使用される単純な 4x4 変換行列です。これは、任意の数の線形変換を表すために使用できます。このタイプのマトリックスについては、このウィキペディアの記事を参照してください。これらの要素のほとんどは、独立して解釈することはできませんが、一部の要素は独立して解釈できます。たとえば、m41、m42、および m43 は、3 スペースでの移動を表します。たとえば、ポイントにこの行列を掛けると、次のようになります。
[ 1 0 0 0 ]
[ 0 1 0 0 ]
[ 0 0 1 0 ]
[ 1 2 3 1 ]
次に、その点を +X 方向に 1 単位、+Y 方向に 2 単位、+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 ベクトルとして表す必要があることに注意してください。また、このベクトルは実際には行列自体であり、この行列の形式は変換行列に関するウィキペディアの記事で説明されているものとは異なることに注意してください。これは、ポイントが通常 1 列 4 行の行列で表されるためですが、Apple では 4 列 1 行の行列として表されます。これは、ウィキペディアの記事に表示される変換行列が iPhone で正しく機能するためには、使用する前に転置する必要があることを意味します。
もう 1 つの例は、スケーリング変換です。
[ 2 0 0 0 ]
[ 0 2 0 0 ]
[ 0 0 2 0 ]
[ 0 0 0 1 ]
ポイントのすべての座標が 2 倍になるため、(1, 2, 3) は (2, 4, 6) になります。回転や透視投影などの他の変換は、視覚的に認識するのがより困難です。
Apple からの変換に関する詳細情報は次のとおりです。これらの行列を生成するために、一連のユーティリティ変換が Apple によって提供されています。このリンクを参照してください。CATransform3DMakeRotation の背後にある数学については実際には議論していませんが、このリンクは議論しています。