コッホ曲線

by gaziya forked from ドラゴン曲線 (diff: 50)
import net.hires.debug.Stats
♥0 | Line 85 | Modified 2011-10-27 17:45:01 | 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/sHqs
 */

// forked from gaziya's ドラゴン曲線
// 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 points:Array
        private var recursion:int = 5
        private var count:int
        private var wait:int = 20
        private var skip:int = wait
        public function setup():void {
            background(0)
            stroke(0xFFFFFF)            
            points = polygonPoints(3,200)
            count = 0
            //addChild(new Stats())
        }
        
        
        public function draw():void {
            if (skip < wait){
                skip++
                return
            }else{
                skip = 0
            }
            background(0)
            translate(width / 2, height / 2)
            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++
            var matrix:Matrix
            var bp:Point = null
            var ep:Point = null
            var rate:Number
            var buf:Array = []
            if (count < recursion){
                for each(var value:Point in points){
                    bp = ep
                    ep = value
                    if (bp != null) {
                        matrix = new Matrix()
                        matrix.translate(-bp.x,-bp.y)
                        rate = 1 / 3
                        matrix.scale(rate, rate)
                        matrix.translate(bp.x,bp.y)
                        buf.push(matrix.transformPoint(ep))
                        
                        matrix = new Matrix()
                        matrix.translate(-bp.x,-bp.y)
                        rate = 1 / Math.sqrt(3)
                        matrix.scale(rate, rate)
                        matrix.rotate(Math.PI / 6)
                        matrix.translate(bp.x,bp.y)
                        buf.push(matrix.transformPoint(ep))                        
                        
                        matrix = new Matrix()
                        matrix.translate(-bp.x,-bp.y)
                        rate = 2 / 3
                        matrix.scale(rate, rate)
                        matrix.translate(bp.x,bp.y)
                        buf.push(matrix.transformPoint(ep))
                    }
                    buf.push(ep)
                }
                points= buf
            }else{                
                points = polygonPoints(3,200)
                count = 0
            }
        }
        
        private function polygonPoints(cornar:int,radius:int):Array {
            var points:Array = []
            var theta:Number = Math.PI / 2
            var step:Number = Math.PI * 2 /cornar
            for (var i:int; i<cornar; i++) {
                points.push(new Point(radius * Math.cos(theta), -radius * Math.sin(theta)))
                theta += step
            }
            points.push(points[0])
            return points
        }

    }
}