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

时间:2009-08-11 14:31:03

标签: iphone transform

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

1 个答案:

答案 0 :(得分: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;

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

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

然后它将该点向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 ]

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

另一个例子是缩放变换:

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

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

以下是来自Apple的transforms的更多信息。 Apple提供了一系列实用程序转换来生成这些矩阵,请参阅this link。他们实际上并没有讨论CATransform3DMakeRotation背后的数学,但this link确实如此。