通过分析flip_V_3()函数运行时在Output窗口输出的trace()信息,可以理解concat()方法和AS3矩阵运算的内部逻辑:
//第一周期
flipmatrix:(a=1, b=0, c=0, d=0.995, tx=0, ty=0)
OriginalMatrix:(a=1, b=0, c=0, d=1, tx=-50, ty=50)
Concat result matrix:(a=1, b=0, c=0, d=0.995, tx=-50, ty=49.750)
……
//第三周期
flipmatrix:(a=1, b=0, c=0, d=0.955, tx=0, ty=0)
OriginalMatrix:(a=1, b=0, c=0, d=1, tx=-50, ty=50)
Concat result matrix:(a=1, b=0, c=0, d=0.955, tx=-50, ty=47.766)
//第5个周期
flipmatrix:(a=1, b=0, c=0, d=0.877, tx=0, ty=0)
OriginalMatrix:(a=1, b=0, c=0, d=1, tx=-50, ty=50)
Concat result matrix:(a=1, b=0, c=0, d=0.877, tx=-50, ty=43.879)
……
显然,显示对象的tx和ty参与了运算,其运算原理十分有趣:在矩阵相乘时(A×B),AS3对矩阵A和矩阵B中tx,ty的处理比较特殊,过程如图所示:
在运算中既不是将两个矩阵的tx,ty向量相加,也不是将两者相乘。而是按照仿射变形公式f(x)=Ax+b,把矩阵A中的tx,ty看作一个向量代入公式,把矩阵B中的tx,ty看作位移向量。因此运算就变为矩阵A中的tx,ty同矩阵B相乘,再与矩阵B中的tx,ty相加。