我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,你的变换矩阵参数需要的顺序相反
这让我很困惑,经过一番搜索后发现wiki说了这个
换句话说,组合变换A后跟B的矩阵就是各个矩阵的乘积。请注意,乘法与英语句子的顺序相反:“A后跟B”的矩阵是BA,而不是AB。
我真的不明白这一点,因为根据我目前的知识,矩阵不是可交换的,但可以关联,所以如果原始坐标从右边增加,一切都可以像这样解释
{{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)
行表示(来自问题)