首页 > 代码库 > ActionScript3游戏中的图像编程(连载六十六)
ActionScript3游戏中的图像编程(连载六十六)
总目录:http://blog.csdn.net/iloveas2014/article/details/38304477
4.2.2 矩阵变换的归纳及其在Matrix中的体现
虽然运算和矩阵的种类繁多,但稍稍整理一下,便不难得出,这些变换不外乎两类:与1*2矩阵相加和与2*2矩阵相乘:
和
所以,Matrix共包含6个变量,a,b,c,d,tx,ty。但是,Adobe别具匠心地把加法矩阵和乘法矩阵合并成一个3*2的矩阵,仅保留乘法。从而减少矩阵的运算方式,方便矩阵运算的移植,要知道,ActionScript中的矩阵远不止Matrix一个。
合并以后,需要面临的两个问题是:
1 3*2矩阵已经不满足矩阵乘法的条件了,怎么办?
2 如何在乘法里实现加法?
第一个问题,Adobe采取了新增空白列的方法来进行补齐:
u,v,w完全充当占位的作用,所以按单位矩阵的数值填写即可:
z的值又该等于多少呢?我们先计算一下上面的矩阵:
我们看到,tx和ty都分别加到了x和y上面,如果把z设置成1,则恰好同时解决了第二个问题,可谓一举两得。
下面的矩阵表示了Matrix的运算过程。
至此,Matrix的结构已经成型,它已经可以胜任2D图形的基本变换。不过一直让笔者百思不得其解的是,Adobe的帮助文件里为什么没有把横向变量a,c,tx和纵向变量b,d,ty分别排到同一列上,我尝试把矩阵乘法套用进去,Adobe的排法似乎始终都解释不通。所以在这里我自作主张地给Adobe矩阵的b和c对调了一下位置。
这个细节虽然让我纠结了好一段时间,但是读者大可不必在乎,因为它丝毫不影响我们对Matrix类的使用。
ActionScript3游戏中的图像编程(连载六十六)