Section 1
//Main (Main)
package {
import flash.events.*;
import flash.display.*;
import flash.utils.*;
public class Main extends Sprite {
private const resx:uint = 640;
private const resy:uint = 640;
private const k:Number = 5;
private var myTimer:Timer;
private var bm:Bitmap;
private var maxx:Number;// = 1
private var maxy:Number;// = 1
private var dx:Number;
private var dy:Number;
private var minx:Number;// = -1
private var miny:Number;// = -1
private var s:Array;
private var bmd:BitmapData;
private var uc:Boolean;// = false
public function Main(){
dx = ((maxx - minx) / resx);
dy = ((maxy - miny) / resy);
bmd = new BitmapData(resx, resy, false, 0);
bm = new Bitmap(bmd);
myTimer = new Timer(100);
s = new Array((resx * resy));
super();
myTimer.start();
myTimer.addEventListener(TimerEvent.TIMER, timerHandler);
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyboardHandler);
addChild(bm);
var i:Number = 0;
while (i < (resx * resy)) {
s[i] = new Solution((minx + ((i % resx) * dx)), (miny + ((i / resx) * dy)));
i++;
};
}
private function timerHandler(e:TimerEvent):void{
var i:uint;
var ddx:Number = dx;
var ddy:Number = dy;
if (!uc){
bmd.lock();
i = 0;
while (i < s.length) {
if (s[i].Color == 0){
s[i].Iterate(ddx, ddy);
if (s[i].Color != 0){
bmd.setPixel((i % resx), (i / resx), s[i].Color);
};
};
i++;
};
bmd.unlock();
};
}
private function keyboardHandler(e:KeyboardEvent):void{
var u:Number;
var v:Number;
trace(e.keyCode);
u = ((maxx - minx) / 2);
v = ((maxy - miny) / 2);
uc = true;
if (e.keyCode == 109){
minx = (minx - u);
maxx = (maxx + u);
miny = (miny - v);
maxy = (maxy + v);
dx = (dx * 2);
dy = (dy * 2);
};
if (e.keyCode == 107){
minx = (minx + (u / 2));
maxx = (maxx - (u / 2));
miny = (miny + (v / 2));
maxy = (maxy - (v / 2));
dx = (dx / 2);
dy = (dy / 2);
};
if (e.keyCode == 97){
minx = (minx - u);
maxx = (maxx - u);
miny = (miny + v);
maxy = (maxy + v);
};
if (e.keyCode == 98){
miny = (miny + v);
maxy = (maxy + v);
};
if (e.keyCode == 99){
minx = (minx + u);
maxx = (maxx + u);
miny = (miny + v);
maxy = (maxy + v);
};
if (e.keyCode == 100){
minx = (minx - u);
maxx = (maxx - u);
};
if (e.keyCode == 102){
minx = (minx + u);
maxx = (maxx + u);
};
if (e.keyCode == 103){
minx = (minx - u);
maxx = (maxx - u);
miny = (miny - v);
maxy = (maxy - v);
};
if (e.keyCode == 104){
miny = (miny - v);
maxy = (maxy - v);
};
if (e.keyCode == 105){
minx = (minx + u);
maxx = (maxx + u);
miny = (miny - v);
maxy = (maxy - v);
};
var i:Number = 0;
while (i < (resx * resy)) {
s[i] = new Solution((minx + ((i % resx) * dx)), (miny + ((i / resx) * dy)));
i++;
};
uc = false;
}
}
}//package
Section 2
//Solution (Solution)
package {
public class Solution {
private const solx:Array;
private const soly:Array;
private const k:Number = 5;
public var Color:uint;// = 0
public var x:Number;
public var y:Number;
public function Solution(initx:Number, inity:Number){
solx = [1, 0.309016994374947, -0.809016994374947, -0.809016994374947, 0.309016994374947];
soly = [0, 0.951056516295154, 0.587785252292473, -0.587785252292473, -0.951056516295154];
super();
x = initx;
y = inity;
}
public function Iterate(dx:Number, dy:Number):void{
var w:Number;
var i:uint;
var u:Number = x;
var v:Number = y;
if (((!((u == 0))) || (!((v == 0))))){
i = 0;
while (i < (k - 2)) {
w = ((u * x) - (v * y));
v = ((u * y) + (v * x));
u = w;
i++;
};
w = ((u * u) + (v * v));
x = ((((k - 1) * x) + (u / w)) / k);
y = ((((k - 1) * y) - (v / w)) / k);
};
i = 0;
while (i < k) {
if (Math.abs((x - solx[i])) < dx){
if (Math.abs((y - soly[i])) < dy){
if (i == 0){
Color = 0xFF0000;
};
if (i == 1){
Color = 0xFF00;
};
if (i == 2){
Color = 0xFF;
};
if (i == 3){
Color = 0xFFFF00;
};
if (i == 4){
Color = 0xFF00FF;
};
};
};
i++;
};
}
}
}//package