仿射變形

 http://blog.csdn.net/as3_flash/article/details/2378493

簡單變形也包括許多具體的變形方式,例如球面變形,透視變形,複雜拓撲變形等,其算法各有差別。在AS3中,運用Matrix類進行的簡單變形都屬於仿射變形(Affine Transformations)

所謂仿射變形,其特徵就是一切變形都不會破壞線條的線性。變形後水平和垂直方向上的長度比例可以發生變化。但直線永遠不會變成曲線。坐標系內各點的變換都是均勻的,不存在局部扭曲和象限的塌縮。一對平行線,無論經過多少次仿射變形,都將保持平行,不會有交集。

既然屬於簡單變形,所以仿射變形的過程可以寫為數學函數表達式。仿射變形主要是通過變量乘以變換矩陣實現的。考慮到位移難以用矩陣乘法獲得,所以需要引入了一個位移矢量加權。其通用數學表達式為:

f(x)=Ax+b

其中,A是一個變換矩陣,b表示平移矢量。通過這個數學公式,可以計算諸如平移,旋轉,拉伸等仿射變形。

在計算機語言中,一般都會將位移矢量與變形矩陣合併在一個矩陣之中。這個矩陣為三行三列,左上角的兩行兩列是變形矩陣,第三列為平移矢量,並將餘下的位置用數值補足。如圖所示。

仿射變形_第1张图片

這種記法只是為了計算機程序構造的方便。雖然表面上是一個三行三列的矩陣,但在實際運算時,遵循的依然是f(x)=Ax+b的公式。

因為AS3中的Matrix類是處理仿射變形的,所以其功能有先天的限制。當處理複雜的變形時,必須另尋它途,在代碼中自行創建變形函數去實現。如果不考慮這一點,在代碼中嘗試用Matrix類獲得非仿射變形效果,則無異於南轅北轍,難以成功。

 

你可能感兴趣的:(仿射變形)