Chaos Grotesque Flower
前回のもの(Chaos Kaleidoscope http://wonderfl.net/c/wbEd/)
をデチューン
変更点
・SpriteでなくBitmapDataに描写
・斜交座標系への変更を導入(綺麗にまるく表示できる)
・Randomで与えるパラメータの数を自重
・花の形がいっぱい出るようになった
・パラメータのせいか描写の仕方のせいか、何か気持ち悪い
・カオス生成の漸化式を変更
前回
x_n+1 = a*x_n + y_n + (d*x_n)/(1+x_n^2)
y_n+1 = -x_n
今回
x_n+1 = a*x_n + y_n + d/(1+x_n^2)
y_n+1 = -x_n
------------------------------
x_n+1 = a*x_n + y_n + f(x_n)
y_n+1 = -x_n
の形で、 f(x_n){x_n->∞}=0 のようにfを作ればいいみたい。
BitmapDataへの描写はsakefのコードを参考にさせてもらいました、ありがとう。
http://wonderfl.net/c/lIme
/**
* Copyright aomoriringo ( http://wonderfl.net/user/aomoriringo )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/jitY
*/
/*
前回のもの(Chaos Kaleidoscope http://wonderfl.net/c/wbEd/)
をデチューン
変更点
・SpriteでなくBitmapDataに描写
・斜交座標系への変更を導入(綺麗にまるく表示できる)
・Randomで与えるパラメータの数を自重
・花の形がいっぱい出るようになった
・パラメータのせいか描写の仕方のせいか、何か気持ち悪い
・カオス生成の漸化式を変更
前回
x_n+1 = a*x_n + y_n + (d*x_n)/(1+x_n^2)
y_n+1 = -x_n
今回
x_n+1 = a*x_n + y_n + d/(1+x_n^2)
y_n+1 = -x_n
------------------------------
x_n+1 = a*x_n + y_n + f(x_n)
y_n+1 = -x_n
の形で、 f(x_n){x_n->∞}=0 のようにfを作ればいいみたい。
BitmapDataへの描写はsakefのコードを参考にさせてもらいました、ありがとう。
http://wonderfl.net/c/lIme
*/
package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.BlendMode;
import flash.display.Graphics;
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_005chaos extends Sprite
{
private var sp:Sprite;
private var bmpd:BitmapData;
private var xx:Number;
private var yy:Number;
private var color:ColorHSV;
// もっと描画速度を遅くしたい場合は値を小さくしてください
private const speed:int = 150;
// パラメータ群
private var a:Number;
private var b:Number;
private var d:Number;
private var size:Number;
public function wonderfl_005chaos()
{
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
sp = new Sprite();
bmpd = new BitmapData(465,465, true, 0x000000);
addChild(new Bitmap(bmpd));
parameterInit();
addEventListener(Event.ENTER_FRAME, onEnterFrame);
stage.addEventListener(MouseEvent.CLICK, onMouseClick);
}
private function parameterInit():void{
a = 4*Math.random()-2;
//d = 50*Math.random()+5;
d = 5;
size = 7;
//xx=4*Math.random()-2;
//yy=4*Math.random()-2;
xx = 1;
yy = 0;
bmpd.fillRect(bmpd.rect, 0x000000);
}
private function onEnterFrame(e:Event):void{
var xold:Number;
var xxx:Number, yyy:Number;
var g:Graphics = sp.graphics;
for(var i:int=0 ; i<speed ; i++){
// カオス漸化式
xold = xx;
xx = a*xx + yy + d/(1+xx*xx);
yy = -xold;
// 斜交座標系へ変換
xxx = ( xx+yy)*Math.sqrt(2+a)*size;
yyy = (-xx+yy)*Math.sqrt(2-a)*size;
var dist:Number = Math.sqrt(xxx*xxx+yyy*yyy);
color = new ColorHSV(dist,1,1);
g.beginFill(color.value, 0.5);
g.drawCircle(xxx+bmpd.width/2, yyy+bmpd.height/2, 1);
g.endFill();
}
bmpd.draw(sp, null, null, BlendMode.ADD, null, true);
g.clear();
}
private function onMouseClick(e:Event):void{
parameterInit();
}
}
}