首页 > 代码库 > 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游戏中的图像编程(连载六十六)