forked from: TransformUtil実験

by Akiyah forked from TransformUtil実験 (diff: 160)
♥0 | Line 69 | Modified 2011-03-17 01:15:54 | MIT License | (replaced)
play

ActionScript3 source code

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

// forked from Akiyah's TransformUtil実験
package {
    import flash.display.*;
    import flash.events.*;
    import flash.filters.*;
    import flash.geom.*;
    import flash.net.*;
    import flash.system.*;
    import flash.text.*;
    import flash.utils.*;

    public class FlashTest extends Sprite {
        Security.loadPolicyFile("http://assets.wonderfl.net/crossdomain.xml");
        private var loader:Loader = new Loader();

        public function FlashTest() {
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadDone);
            loader.load(new URLRequest("http://assets.wonderfl.net/images/related_images/d/dd/ddba/ddba7040b86bdba34f301587d2353904b04148ca"));
        }

        private function loadDone(e:Event):void {
           var bmd:BitmapData= new BitmapData(loader.width,loader.height);
           bmd.draw(loader);

           var a:Triangle;
           var b:Triangle;
           
           a = new Triangle(new Point(100, 100), new Point(200, 100), new Point(100, 200));
           b = new Triangle(new Point(100 - 50, 100), new Point(200 + 100, 100), new Point(100 + 20, 200 + 100));
           //TransformUtil.drawBitmapTriangle(this.graphics, bmd, a, b);
           a.draw(this.graphics, bmd, b);

           a = new Triangle(new Point(200, 200), new Point(200, 100), new Point(100, 200));
           b = new Triangle(new Point(200 + 150, 200), new Point(200 + 100, 100), new Point(100 + 20, 200 + 100));
           //TransformUtil.drawBitmapTriangle(this.graphics, bmd, a, b);
           a.draw(this.graphics, bmd, b);
        }
    }
}


import flash.geom.Point;
import flash.geom.Matrix;
import flash.display.Graphics;
import flash.display.BitmapData;

class Triangle {
    public var p0:Point;
    public var p1:Point;
    public var p2:Point;
    function Triangle(p0:Point, p1:Point, p2:Point) {
        this.p0 = p0;
        this.p1 = p1;
        this.p2 = p2;
    }
    public function matrix():Matrix {
        return new Matrix(
            p1.x - p0.x, p1.y - p0.y,
            p2.x - p0.x, p2.y - p0.y);
    }
    public function transformMatrix(b:Triangle):Matrix {
        var ma : Matrix = matrix();
        ma.invert();
        var mb : Matrix = b.matrix();
        var m : Matrix = new Matrix();
        m.translate(-p0.x, -p0.y);
        m.concat(ma);
        m.concat(mb);
        m.translate(b.p0.x, b.p0.y);
        return m;
    }
    public function draw(g:Graphics, bitmapData:BitmapData, b:Triangle):void {
        var m:Matrix = transformMatrix(b);
        g.beginBitmapFill(bitmapData, m);
        g.moveTo(b.p0.x, b.p0.y);
        g.lineTo(b.p1.x, b.p1.y);
        g.lineTo(b.p2.x, b.p2.y);
        g.lineTo(b.p0.x, b.p0.y);
        g.endFill();
    }
}