Tinkerbell mapをActionScriptで。
以前作ったHénon map同様、非線形写像によるお絵かきです。
計算式は以下のとおりです。
f( x, y ) = ( x2 – y2 + ax + by, 2xy + cx + dy )
(a, b, c, d) = (0.9, -0.6013, 2.0, 0.5)
今回は基本の形を魅せるつもりで作ったのでインタラクティブ性はありません。asオンリー。
パラメータが3つ以上あるとユーザーは操作するのがダルくなると思うので;
描画部分のスクリプトは以下のとおりです。
//キャンバスサイズは500*500px(SIZE)
//bmp:BitmapDataにプロット(pt:Point)しています.
private function drawTinkerbell(e:Event):void {
// ------------------ Tinkerbell Mapping-------------------
bmp.lock();
for (var i:int = 0; i <= 100; i++) {
//初期値を乱数で与える(範囲は-1?1)
_x = 2.0 * (Math.random() - 0.5);
_y = 2.0 * (Math.random() - 0.5);
k = Math.floor(256 * (_x * _x + _y * _y)); //色決め
//写像の繰り返し
for (var j:int = 0; j < 100; j++) {
tmp = _x * _x - _y * _y + a * _x + b * _y;
_y = 2 * _x * _y + c * _x + d * _y;
_x = tmp;
pt.x = Math.floor(SIZE / _x);
pt.y = Math.floor(SIZE / -_y);
bmp.setPixel(pt.x + SIZE/2 + 50, pt.y + SIZE/2 - 100, changeColor(k));
}
}
bmp.unlock();
}
private function changeColor(n:int):uint {
var r:uint = (n & 0x2f) << 2;
var g:uint = (n & 0x1f) << 3;
var b:uint = (n & 0xf) << 4;
return r << 16 | g << 8 | b;
}
それにしてもティンカーベルって気の利いた名前を付けるものですね。
これはアノ妖精が描いたのしょうか。他の写像と比べると美しい模様です。
関連記事:
・Gumowsky-Mira Map - Flex(AS3.0)
・Henon Map - Flex(AS3.0)
・Apollonian Gasket - Flex(ActionScript3.0)
・Star Julia - Flex(ActionScript3.0)
・Burning Ship Fractal - Flex(ActionScript3.0)
・Fractal Flight - Flex(ActionScript3.0)でマンデルブロ集合
