flash on 2010-7-26

by yd_niku
♥0 | Line 132 | Modified 2010-07-27 01:17:48 | MIT License
play

ActionScript3 source code

/**
 * Copyright yd_niku ( http://wonderfl.net/user/yd_niku )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/5n7F
 */

package {
    import flash.geom.Point;
    import flash.display.Sprite;
    import flash.geom.Matrix;
    import flash.text.*;
    public class FlashTest extends Sprite {
        private var m:Matrix3x3;
        public function FlashTest() {
            // write as3 code here..
            var t:TextField = new TextField();
            addChild(t);
            
            t.width = t.height = 465; 
            t.multiline = true;
            
            var mm:Matrix = new Matrix();
            m = new Matrix3x3();
         
            mm.translate(1,1);
            m.translate(1,1);
            //t.text = m.toString();
            mm.rotate(Math.PI/180*30)
            m.rotate(Math.PI/180*30);
            
            t.appendText( "\n" + mm.tx );
            t.appendText( "\n" + m.m13 );
            t.appendText( "\n" + mm.ty );
            t.appendText( "\n" + m.m23 );
            
            drawPoint( new Point(50,50), 0xff000000 );
            drawPoint( mm.deltaTransformPoint( new Point(100,50) ), 0xFF0000FF );
            drawPoint( mm.transformPoint( new Point(10,10) ), 0xFFFF<<16 ); 
            drawPoint( m.deltaTransformPoint( new Point(100,50) ), 0x400000FF, 10 );
            drawPoint( m.transformPoint( new Point(10,10) ), 0x40FF0000, 10 );
        }
        private function drawPoint(p:Point,c:uint,r:Number=2):void{
            var a:Number = ((c>>24)&0xFF) / 0xFF; 
            graphics.beginFill(c&0x00FFFFFF,a);
            graphics.drawCircle(p.x,p.y,r);
            graphics.endFill();
        }
    }
}

import flash.geom.Point;

import flash.external.*;

internal function log(msg:*):void{
    if( ExternalInterface.available ) ExternalInterface.call("console.log", msg );
}
class Matrix3x3{
    public var m11:Number;
    public var m12:Number;
    public var m13:Number;
    public var m21:Number;
    public var m22:Number;
    public var m23:Number;
    public var m31:Number;
    public var m32:Number;
    public var m33:Number;
    public function Matrix3x3(
        m11:Number=1, m12:Number=0, m13:Number=0,
        m21:Number=0, m22:Number=1, m23:Number=0,
        m31:Number=0, m32:Number=0, m33:Number=1 ) {
        this.m11 = m11;
        this.m12 = m12;
        this.m13 = m13;
        this.m21 = m21;
        this.m22 = m22;
        this.m23 = m23;
        this.m31 = m31;
        this.m32 = m32;
        this.m33 = m33;
    }
    public function clone():Matrix3x3{
        return new Matrix3x3(m11,m12,m13,m21,m22,m23,m31,m32,m33);
    }
    
    public function add(m:Matrix3x3):void{
        m11 += m.m11;
        m12 += m.m12;
        m13 += m.m13;
        m21 += m.m21;
        m22 += m.m22;
        m23 += m.m23;
        m31 += m.m31;
        m32 += m.m32;
        m33 += m.m33;
    }
    public function sub(m:Matrix3x3):void{
        m11 -= m.m11;
        m12 -= m.m12;
        m13 -= m.m13;
        m21 -= m.m21;
        m22 -= m.m22;
        m23 -= m.m23;
        m31 -= m.m31;
        m32 -= m.m32;
        m33 -= m.m33;
    }
    public function multiply(b:Matrix3x3):void{
        var a:Matrix3x3 = clone();
        m11 = a.m11 * b.m11 + a.m12 * b.m21 + a.m13 * b.m31;
        m12 = a.m11 * b.m12 + a.m12 * b.m22 + a.m13 * b.m32;
        m13 = a.m11 * b.m13 + a.m12 * b.m23 + a.m13 * b.m33;
        m21 = a.m21 * b.m11 + a.m22 * b.m21 + a.m23 * b.m31;
        m22 = a.m21 * b.m12 + a.m22 * b.m22 + a.m23 * b.m32;
        m23 = a.m21 * b.m13 + a.m22 * b.m23 + a.m23 * b.m33;
        m31 = a.m31 * b.m11 + a.m32 * b.m21 + a.m33 * b.m31;
        m32 = a.m31 * b.m12 + a.m32 * b.m22 + a.m33 * b.m32;
        m33 = a.m31 * b.m13 + a.m32 * b.m23 + a.m33 * b.m33;
    }
    
    
    public function translate(vx:Number=0,vy:Number=0):void{
        m13 += vx;
        m23 += vy;
    }
    
    public function scale(sx:Number=1,sy:Number=1):void{
        m11 *= sx;
        m21 *= sy;
    }
    public function rotate(rad:Number):void {
        var c:Number = Math.cos(rad);
        var s:Number = Math.sin(rad);
        
        var m:Matrix3x3 = clone();
        m11 = c; m12 = -s; m13 = 0;
        m21 = s; m22 =  c; m23 = 0;
        m31 = 0; m32 =  0; m33 = 1;
        multiply(m);
    }
    
    
    public function deltaTransformPoint(p:Point):Point{
        var rp:Point = new Point();
        rp.x = p.x* m11 + p.y * m12;
        rp.y = p.x* m21 + p.y * m22; 
        return rp;
    }
    public function transformPoint(p:Point):Point{
        var rp:Point = new Point();
        rp.x = p.x* m11 + p.y * m12 + m13;
        rp.y = p.x* m21 + p.y * m22 + m23;
        return rp;
    }
}

Forked