ドラゴン曲線

by gaziya
♥0 | Line 65 | Modified 2011-10-27 16:45:42 | MIT License
play

ActionScript3 source code

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

// forked from gaziya's frocessing用スケルトン
package {
    import frocessing.display.F5MovieClip2DBmp
    import flash.geom.Matrix
    import flash.geom.Point
    //import net.hires.debug.Stats
    [SWF(width=465,height=465,frameRate=30)]

    public class Main extends F5MovieClip2DBmp {
        private var rate:Number = 1 / Math.sqrt(2)
        private var theta:Number = -Math.PI / 4
        private var points:Array
        private var recursion:int = 12
        private var count:int
        private var wait:int = 7
        private var skip:int = wait
        public function setup():void {
            background(0)
            stroke(0xFFFFFF)
            points = [new Point(random(30,80),random(100,300)),
                    new Point(random(350,400),random(100,300))]
            count = 0
            //addChild(new Stats())
        }
        
        
        public function draw():void {
            if (skip < wait){
                skip++
                return
            }else{
                skip = 0
            }
            background(0)
            for(var i:int=0; i<points.length;i++){
                if (i==0){
                    moveTo(points[i].x,points[i].y)
                }else{
                    lineTo(points[i].x,points[i].y)
                    
                }
            }
            count++
            if (count < recursion){               
                var bp:Point = null
                var ep:Point = null
                var buf:Array = []
                for each(var value:Point in points){
                    bp = ep
                    ep = value
                    if (bp != null) {
                        var matrix:Matrix = new Matrix()
                        matrix.translate(-bp.x,-bp.y)
                        matrix.scale(rate,rate)
                        matrix.rotate(theta)
                        matrix.translate(bp.x,bp.y)
                        theta *= -1
                        buf.push(matrix.transformPoint(ep))
                        buf.push(ep)
                    }else{
                        buf.push(ep)
                    }
                }
                points= buf
            }else{
                points = [new Point(random(30,80),random(100,300)),
                        new Point(random(350,400),random(100,300))]
                count = 0
            }
        }
    }
}

Forked