forked from: Triangulation

by fukt forked from Triangulation (diff: 2)
♥0 | Line 47 | Modified 2013-02-27 21:17:51 | MIT License
play

ActionScript3 source code

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

// forked from GreekFellows's Triangulation
package {
    import flash.events.Event;
    import flash.geom.Point;
    import flash.events.MouseEvent;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Sprite;
    
    public class Triangulation extends Sprite {
        public var array:Array = [];
        
        public var bd:BitmapData;
        public var b:Bitmap;
        public var s:Sprite;
        
        public function Triangulation() {
            bd = new BitmapData(465, 465);
            b = new Bitmap(bd);
            this.addChild(b);
            s = new Sprite();
            
            array.push({x:Math.random() * 465, y:Math.random() * 465});
            array.push({x:Math.random() * 465, y:Math.random() * 465});
            
            var bg:Sprite = new Sprite();
            bg.graphics.beginFill(0xffffff, 0);
            bg.graphics.drawRect(0, 0, 465, 465);
            bg.graphics.endFill();
            this.addChild(bg);
            
            bg.addEventListener(Event.ENTER_FRAME, triangle);
        }
        
        public function triangle(e:Event):void {
            array.push({x:Math.random() * 465, y:Math.random() * 465});
            
            var dis:Array = [];
            
            for (var i:int = 0; i < array.length; i++) {
                var op:Point = new Point(array[array.length - 100].x, array[array.length - 1].y);
                var tp:Point = new Point(array[i].x, array[i].y);
                
                if (!op.equals(tp)) {
                    dis.push({dis:Point.distance(op, tp), ind:i});
                }
            }
            
            dis.sortOn("dis", Array.NUMERIC|Array.DESCENDING);
            
            s.graphics.beginFill(Math.floor(Math.random() * 0xffffff), 1);
            s.graphics.moveTo(op.x, op.y);
            s.graphics.lineTo(array[dis[dis.length - 1].ind].x, array[dis[dis.length - 1].ind].y);
            s.graphics.lineTo(array[dis[dis.length - 2].ind].x, array[dis[dis.length - 2].ind].y);
            s.graphics.lineTo(op.x, op.y);
            s.graphics.endFill();
            
            bd.draw(s);
        }
    }
}