Flex & Flash 中的 Transform Matrix(变换矩阵)
“变换矩阵”使用"Affine transformations仿射变换"性质: “仿 射变换”是坐标点在保持共线(面)的前提下,空间中的相对距离发生变化。这就是说,坐标点的所属平面不发生变化,且原本平行的直线仍然平行,但坐标点与坐 标点之间的距离可能发生与原来成比例的变化。“仿射变换”允许位移,缩放,倾斜和旋转。他不能做锥形或角度扭曲。如下图: ? “变换矩阵”是一个3X3的矩阵: a ?- x scale(X轴缩放) b ?- y skew(Y轴倾斜) c ?- x skew(X轴倾斜) d ?- y scale(Y轴缩放) tx ?- x translation(X轴位移) ty ?- y translation(Y轴位移) u,v,w是常数分别为0,1,得到如下"变换矩阵": ? "变换矩阵"的公式为(Matrix类中没有把u,w做为属性): x' = x*a + y*c + tx y' = x*b + y*d + ty x'和y'是x和y的最终位置。 ? 默认矩阵: x' = x*1 + y*0 + 0 y' = x*0 + y*1 + 0 结果是 x' = x y' = y ? 应用变换: x' = 2*x + 0*y + 0 = 2x y' = 0*x + 1*y + 0 = y ---------------------------------------------------------------------------------- x' = 1*x + 1*y + 0 =?x + y? y' = 0*x + 1*y + 0 = y ---------------------------------------------------------------------------------- 旋转的实现是用a,b,c,d四个值乘上相应的三角函数而成。 公式如下: x' = cos(angle)*x - sin(angle)*y + 0 y' = sin(angle)*x + cos(angle)*y + 0 P.S. angle以弧度为单位的旋转角度,其与前面文章提到过的rotation属性不一样,rotation属性是以度为单位的旋转角度。 弧度=弧长/半径。 圆的周长=2π*半径,所以一个圆周角(360度)是2π弧度。 一个平角(180度)是2π/(360/180)=π弧度。 一个直角(90度)是2π/(360/90)=π/2弧度。 ? Matrix对象的创建: import flash.geom.Matrix; var?my_matrix:Matrix = new Matrix(); var my_matrix_d:Matrix = new Matrix(1,1,0); //默认矩阵的创建 ? Matrix类的常用方法: translate(tx:Number,ty:Number):void //位移设置 scale(sx:Number,sy:Number):void //缩放设置 rotate(angle:Number):void //旋转设置 P.S. angle以弧度为单位的旋转角度,其与前面文章提到过的rotation属性不一样,rotation属性是以度为单位的旋转角度。 identity():void //重置 由于倾斜是非典型转换,没有办法提供方法。 ?它可以通过手动调整对象的b和c属性来代替完成。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |