我在哪里可以找到所有变换矩阵字段的解释?

21 iphone transform

我在苹果的一些文档中看到,CALayer转换属性背后的矩阵有m14,m21,m22等字段.我还记得我在一两个月前看过一张解释这些字段的表格.我很难找到它.有谁知道来源?

Gab*_*abe 44

该结构看起来像这样:

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;
Run Code Online (Sandbox Code Playgroud)

这只是用于变换4向量的4x4变换矩阵.它可用于表示任意数量的线性变换.请参阅维基百科关于此类矩阵的文章.大多数这些元素无法真正独立解释,但有些可以.例如,m41,m42和m43表示3空间中的平移.例如,如果您将一个点乘以此矩阵:

[ 1  0  0  0 ]
[ 0  1  0  0 ]
[ 0  0  1  0 ]
[ 1  2  3  1 ]
Run Code Online (Sandbox Code Playgroud)

然后它将该点向1 + +转换为2,向+ 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 ]
Run Code Online (Sandbox Code Playgroud)

请注意,该点必须表示为4向量,其中第4个元素为1.还要注意,此向量实际上是矩阵本身,并且此矩阵的格式与维基百科文章中关于变换矩阵的描述不同.这是因为点通常由单个列(4行矩阵)表示,但Apple将它们表示为4列单行矩阵.这意味着您在维基百科文章中看到的任何变换矩阵需要在iPhone上使用之前进行转置才能使其正常工作.

另一个例子是缩放变换:

[ 2  0  0  0 ]
[ 0  2  0  0 ]
[ 0  0  2  0 ]
[ 0  0  0  1 ]
Run Code Online (Sandbox Code Playgroud)

它将使你的点的所有坐标加倍,因此(1,2,3)将成为(2,4,6).其他变换,如旋转和透视投影,更难以在视线中识别.

以下是有关Apple 变换的更多信息.Apple提供了一堆实用程序转换来生成这些矩阵,请参阅此链接.他们实际上并没有讨论CATransform3DMakeRotation背后的数学,但这个链接确实如此.