8.6.7 Matrix类的本质

  在AS3中,对一个显示对象进行变形操作,需要使用Matrix类。Matrix类的变形操作是基于一个三行三列的方型矩阵。当在代码中创建一个Matrix类时,AS3的内部机制就创建了一个这样的变换矩阵作为代码操作的数理基础。

使用以下代码可以在AS3中创建一个矩阵,并输出矩阵的值:

var myMatrix:Matrix=new Matrix;

trace(myMatrix.toString())

其输出结果为:

(a=1 b=0 c=0 d=1 tx=0 ty=0)

从这个结果上看,AS3中的矩阵似乎是两行三列的矩阵,其实不然。充分的设置矩阵内的值,理论上可以进行三维的操作。但Flash不支持三维,其中的uvw被自动忽略,运算时总是令u=0v=0,以及w=1。在使用toString()方法时,对于永远保持不变的uvw就不再输出了。所以真实的Matrix类的变换矩阵应该形如图所示:

矩阵操作描述的是如何将坐标系内的点映射到另一个位置。代码可以读取和写入此矩阵内的数值,来改变和控制形变。在影片运行时,矩阵内相应的值会同显示对象的信息相乘相加,运算出变形后的对象信息,并绘制在舞台上。

AS3中矩阵类变形的具体的数学公式同前文所述的仿射变形公式相同,并不复杂。假设一个点A,其坐标值为(xy),则等价于三维坐标系中的(xyz),其中z为任意值,表示该二维坐标平面是三维空间中垂直于z轴的一个平面。该平面内所有点在z坐标上都具有相同的值。

假设变形运算后的位置为(mn),则根据矩阵乘法和仿射变形公式,其运算结果为:

m=x*a+y*c+z*u+tx

n= x*b+y*d+z*v+ty

AS3中,uv永远是0,所以简化的运算结果为:

m=x*a+y*c+tx

n= x*b+y*d+ty

对于一个Matrix对象,其内部属性abcdtxty,就对应了图8-35中矩阵内的值。AS3DisplayObject类及其子类,内部都包含transform属性,这个属性是一组对象的集合,其中就有一个矩阵类。将这个类拷贝,并对副本做操作,能得到一个目标矩阵。将目标矩阵替换原有矩阵。Flash会自动套用目标矩阵的信息,改变显示对象。这种改变包括位移,缩放,旋转,斜切,映射等。

变形可以累计。无论对一个矩阵进行多少次变形,它保留的都是个变形依次积累的数值信息。当对显示对象应用这个矩阵的时候,等于所有的变换都被依次应用了。代码中不能使用为矩阵类赋null值的办法使其回复原始状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值