Chaos Kaleidoscope
飽きたらクリックしてください
パラメータがランダムだらけなので、2度と同じ模様はできないと思います
フルスクリーンの方が見やすいかも。
/**
* Copyright aomoriringo ( http://wonderfl.net/user/aomoriringo )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/wbEd
*/
// 飽きたらクリックしてください
// パラメータがランダムだらけなので、2度と同じ模様はできないと思います
// フルスクリーンの方が見やすいかも。
package
{
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.events.MouseEvent;
import frocessing.color.*;
//[SWF(backgroundColor="0x000000")]
public class wonderfl_002chaos extends Sprite
{
private var sp:Sprite;
private var xx:Number;
private var yy:Number;
private var color:ColorHSV;
// もっと広域でみたい場合は値を大きくしてください
private const s:Number = 10;
// もっと描画速度を遅くしたい場合は値を小さくしてください
private const speed:int = 30;
// パラメータ群
private var a:Number;
private var b:Number;
private var d:Number;
private var size:Number;
public function wonderfl_002chaos()
{
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
graphics.beginFill(0);
graphics.drawRect(0,0,2000,2000);
graphics.endFill();
// -1.5から1.5の範囲でランダム
a = 3*Math.random()-1.5;
// -30から30の範囲でランダム
b = 60*Math.random()-30;
d = 50*Math.random()+5;
size = d/s;
sp = new Sprite();
sp.x = stage.stageWidth/2;
sp.y = stage.stageHeight/2;
addChild(sp);
xx=4*Math.random()-2;
yy=4*Math.random()-2;
addEventListener(Event.ENTER_FRAME, onEnterFrame);
stage.addEventListener(MouseEvent.CLICK, onMouseClick);
stage.addEventListener(Event.ADDED_TO_STAGE, onAddStage);
}
private function onAddStage(e:Event):void{
sp.x = stage.stageWidth/2;
sp.y = stage.stageHeight/2;
}
private function onMouseClick(e:Event):void{
a = 3*Math.random()-1.5;
b = 60*Math.random()-30;
d = 50*Math.random()+5;
size = d/s;
xx=4*Math.random()-2;
yy=4*Math.random()-2;
sp.graphics.clear();
}
private function onEnterFrame(e:Event):void{
var xold:Number;
var xxx:Number, yyy:Number;
for(var i:int=0 ; i<speed ; i++){
// カオス漸化式
xold = xx;
xx = a*xx + yy + (d*xx)/(1+xx*xx)+b;
yy = -xold;
// 軸と大きさ調整
xxx = (xx+a/2*yy)*size;
yyy = yy*size;
var radius:Number = Math.atan2(yyy,xxx);
color = new ColorHSV(radius*180/Math.PI,1,1);
sp.graphics.beginFill(color.value,0.5);
sp.graphics.drawCircle(xxx,yyy,2);
sp.graphics.endFill();
}
}
}
}