Matrix類的本質

 http://blog.youkuaiyun.com/as3_flash/article/details/2378549

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、付费专栏及课程。

余额充值