Koch paint
♥0 |
Line 123 |
Modified 2011-07-13 23:05:06 |
MIT License
archived:2017-03-20 08:42:40
ActionScript3 source code
/**
* Copyright smallwind1912 ( http://wonderfl.net/user/smallwind1912 )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/i0vm
*/
package {
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.TimerEvent;
import flash.utils.Timer;
[SWF(backgroundColor=0x000000, width=465, height=456, frameRate=30)]
public class FlashTest extends Sprite {
private var numKoch:Number=20;
private var start:Number = 0;
public function FlashTest() {
// hi it use kock to paint some thing
// it not't good for performance
// write as3 code here..
start = 0;
paint(null);
var t:Timer = new Timer(5000,5);
t.addEventListener(TimerEvent.TIMER, paint);
t.start();
}
private function paint(e:TimerEvent):void
{
var erase:uint;
if (start % 2!=0)
erase = 1;
else erase = 0;
//trace(start+" "+erase);
for (var i:int = 0; i < numKoch; i++)
{
//erase to use erase kock with black color
var k:Koch = new Koch(4, 120, i*numKoch,erase);
k.x = i * Math.cos((i * numKoch ) * 0.017) + 200;
k.y = i * Math.sin((i * numKoch ) * 0.017) +150;
k.cacheAsBitmap = true;
addChild(k);
}
start++;
}
}
}
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Point;
/**
* ...
* @author ...
*/
internal class Koch extends MovieClip
{
private var length:Number;
private var direction:Number;
private var num:int
private var _curX:Number;
private var _curY:Number;
private var l0:Number;
private var state:Number;
private var curN:Number;
private var earse:Number;
private var numPaint:Number;
private var Color:Array = [0x000000,0xD2D200,0xF9F900,0xFFFF37,0xFFFF9D ];
public function Koch(n:int,l:Number,d:Number,e:uint)
{
length = l;
num = n;
direction = d;
graphics.moveTo(0, 0);
l0 = l / Math.pow(3, n);
_curX = 0;
_curY = 0;
state = 0;
curN = 0;
earse = e;
//paintKoch(num, length, direction);
this.addEventListener(Event.ENTER_FRAME, createKoch);
numPaint = Math.pow(4, n);
}
//private function paintKoch(n:int,l:Number,d:Number) :void
//{
//
//if (n>0)
//{
//paintKoch(n - 1, l / 3, d);
//d +=60;
//paintKoch(n - 1, l / 3, d);
//d -= 120;
//paintKoch(n - 1, l / 3, d);
//d += 60;
//paintKoch(n - 1, l / 3, d);
//}
//else {
//curX += l * Math.cos(d * 0.01745329292 );
//curY += l * Math.sin(d * 0.01745329292 );
//graphics.lineTo(curX,curY);
//}
//}
private function createKoch(e:Event):void
{
var angle:Number=getAngle(state);
state++;
if (earse) graphics.lineStyle(4, 0xFF000000);
else graphics.lineStyle(2, state*1000+0xE41B1B);
_curX += l0 * Math.cos( (direction+angle)* 0.01745329292);
_curY += l0 * Math.sin((direction+angle)* 0.01745329292);
graphics.lineTo(_curX, _curY);
if (state == numPaint) {
this.removeEventListener(Event.ENTER_FRAME, createKoch);
}
}
private function getAngle(value:Number) :Number
{
var angle:int=0;
if (value >= 4) {
switch(value%4) {
case 1:
angle+= 60; break;
case 2:
angle-= 60; break;
default:
angle += 0;
break;
}
angle+=getAngle( Math.floor(value / 4));
}
else{
switch(value) {
case 1:
angle+= 60; break;
case 2:
angle-= 60; break;
default:
angle += 0;
break;
}
}
return angle;
}
public function get curY():Number {
return localToGlobal(new Point(_curX, _curY)).y;
}
public function get curX():Number {
return localToGlobal(new Point(_curX, _curY)).x;
}
public function set curX(value:Number):void
{
_curX = value;
}
public function set curY(value:Number):void
{
_curY = value;
}
}