与变换矩阵中的视觉应用顺序相比,为什么乘以两个矩阵需要相反的顺序

时间:2016-01-09 17:11:28

标签: ios matrix uiview transform calayer

reading a book讨论了iOS UIView转换属性,并在使用CGAffineTransformConcat函数时在图片中注意到了这一事实,文档let X = original coordinate first multiply A --> A*X then B --> B*(A*X) equal === (B*A)*X here the final combined matrix BA's order is opposite! 只是将其两个参数相乘但是如果你想得到图1-9,你的变换矩阵参数需要的顺序相反

enter image description here

这让我很困惑,经过一番搜索后发现wiki说了这个

  换句话说,组合变换A后跟B的矩阵就是各个矩阵的乘积。请注意,乘法与英语句子的顺序相反:“A后跟B”的矩阵是BA,而不是AB。

我真的不明白这一点,因为根据我目前的知识,矩阵不是可交换的,但可以关联,所以如果原始坐标从右边增加,一切都可以像这样解释

{{1}}

但是从apple文档中,原始坐标从左边开始相乘 enter image description here

有人可以解释一下,谢谢

1 个答案:

答案 0 :(得分:1)

可以这样想:你在哪里放置你的向量x(假设坐标用柱状向量表示)必须转换?你把它放在最后一个,即BAx。所以先是B(Ax)然后是(B(Ax))。所以基本上你先应用A然后使用B.

在ios中,不是将坐标表示为柱状矢量,而是使用行向量。因此乘法顺序的变化。

注意: - 如果你在两侧进行移调,你可以观察到它给出了另一个表示。

Suppose x is a column vector.
Text book method = BAx
Lets take its transpose

transpose(B*A*x) = transpose(x) * transpose(B*A)
= transpose(x) * transpose(B*A)
= transpose(x) * (transpose(A) * transpose(B))
= transpose(x) * transpose(A) * transpose(B)
rewriting transpose(A) as A' and transpose(B) as B'
= transpose(x) * A' * B'
= ios notation

如果我们在一个表示中使用M,那么我们必须在另一个表示中使用转置(M)。 请参阅此https://www.cs.utexas.edu/~fussell/courses/cs384g/lectures/lecture07-Affine.pdf中的第5页

尝试在两种表示中关联tx和ty。
列式表示(来自wiki)
Columnar representation

行表示(来自问题)
Row representation

相关问题