【问题标题】:Where can I find an explanation of all transform matrix fields?我在哪里可以找到所有变换矩阵字段的解释?
【发布时间】:2010-11-18 15:29:47
【问题描述】:

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

【问题讨论】:

    标签: iphone transform


    【解决方案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 变换矩阵。它可以用来表示任意数量的线性变换。请参阅this wikipedia 上有关此类矩阵的文章。这些元素中的大多数都不能真正独立地解释,但有些可以。例如 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 的有关 transforms 的更多信息。 Apple 提供了一系列实用程序转换来生成这些矩阵,请参阅this link。他们实际上并没有讨论 CATransform3DMakeRotation 背后的数学原理,但 this link 会。

    【讨论】:

    • 这是一个很好的解释,但我认为你已经把你的轴调换了。 X、Y 和 Z 平移值由 m41、m42 和 m43 表示,而不是 m14、m24 和 m34。
    • @NickLockwood 很好,我已经相应地更新了解释。
    猜你喜欢
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    • 2020-05-05
    相关资源
    最近更新 更多