lorenz attractor
♥0 |
Line 73 |
Modified 2011-11-06 15:19:49 |
MIT License
archived:2017-03-20 02:10:00
ActionScript3 source code
/**
* Copyright freddy ( http://wonderfl.net/user/freddy )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/lLKs
*/
package {
import flash.display.Sprite;
import flash.display.Shape;
public class FlashTest extends Sprite {
public function FlashTest() {
var child:Sprite=new Sprite();
child.graphics.beginFill(0xffffff);
child.graphics.drawRect(0,0,480,480);
child.graphics.endFill();
child.graphics.lineStyle(0,0xFF0000, 0.1);
addChild(child);
var cx:int = 240;
var cy:int = 240;
var m:Number = 10;
var c:Number = 5;
var startTime:int;
var i:int;
var j:int;
var fl:Function;
var y:Array = new Array(3);
var yy:Array = new Array(3);
var rk:Function = rungeKutta(3);
fl = (function(p:Number, r:Number, b:Number):Function {
return function(t:Number, y:Array):Array {
return [
-p * y[0] + p * y[1],
-y[0] * y[2] + r * y[0] - y[1],
y[0] * y[1] - b * y[2]
]
}
})(10, 28, 8/3);
for(i=0; i<3; i++) {
y[i] = 1.0;
}
child.graphics.moveTo((int)(y[0]*m)+cx, (int)(y[1]*m)+cy);
for(i=0; i<100000; i++) {
rk(i/100.0, y, 0.01, fl, yy);
child.graphics.lineTo((int)(yy[0]*m)+cx, (int)(yy[1]*m)+cy);
child.graphics.moveTo((int)(yy[0]*m)+cx, (int)(yy[1]*m)+cy);
var arr:Array = y;
y = yy;
yy = arr;
}
}
public function rungeKutta(size:int):Function {
var yy:Array = new Array(size);
var len:int = size;
return function(t:Number, y:Array, h:Number, f:Function, yo:Array):void {
var i:int;
var k1:Array = f(t, y);
for(i=0; i<len; i++) {
k1[i] *= h;
yy[i] = y[i]+k1[i]/2.0;
}
var k2:Array = f(t+h/2.0, yy);
for(i=0; i<len; i++) {
k2[i] *= h;
yy[i] = y[i]+k2[i]/2.0;
}
var k3:Array = f(t+h/2.0, yy);
for(i=0; i<len; i++) {
k3[i] *= h;
yy[i] = y[i]+k3[i];
}
var k4:Array = f(t+h, yy);
for(i=0; i<len; i++) {
k4[i] *= h;
yo[i] = y[i]+(k1[i]+2.0*k2[i]+2.0*k3[i]+k4[i])/6.0;
}
}
}
}
}