コッホ曲線
forked from ドラゴン曲線 (diff: 50)
import net.hires.debug.Stats
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
}
}
}