我在苹果的一些文档中看到,CALayer 的变换属性背后的矩阵具有 m14、m21、m22 等字段。我还记得大约一两个月前,我看到一张解释这些字段的表格。我很难找到它。有人知道来源吗?
HelloMoon
问问题
8009 次
1 回答
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 变换矩阵。它可以用来表示任意数量的线性变换。请参阅有关此类矩阵的此维基百科文章。这些元素中的大多数都不能真正独立地解释,但有些可以。例如 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 向量。另请注意,该向量实际上是一个矩阵本身,并且该矩阵的格式与维基百科关于变换矩阵的文章中描述的格式不同。这是因为一个点通常由单列 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转换的更多信息。Apple 提供了一系列实用程序转换来生成这些矩阵,请参阅此链接。他们实际上并没有讨论 CATransform3DMakeRotation 背后的数学,但这个链接确实如此。
于 2009-08-11T14:57:58.273 回答