In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

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
Get Adobe Flash player
by aomoriringo 05 Jun 2010
/**
 * 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();
		}
	}
}