zoukankan      html  css  js  c++  java
  • 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, 0, 1,得到如下"变换矩阵":

    "变换矩阵"的公式为(Matrix类中没有把u, v, 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,0,0,1,0,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属性来代替完成。

  • 相关阅读:
    同样功能的SQL语句,写成参数和写成常量怎么效率会有那么大的差别
    遭遇钓鱼网站
    SQL Server 2005与Oracle同步注意NUMBER类型转换
    Oracle数据类型(转)
    如何使用枚举的组合值
    社保,交得越多亏得越多(转)
    使用OPENXML函数将XML文档转换为行结果集
    发布一个性能测试工具的破解补丁
    如何将SQLServer2005中的数据同步到Oracle中
    Repository模式
  • 原文地址:https://www.cnblogs.com/bulolo/p/3113662.html
Copyright © 2011-2022 走看看