グモウスキー・ミラ写像をFlex(ActionScript3.0)で。
前回のエノン写像と同様、非線形写像というやつです。
エノン写像との違いは描画に使う式が少し違うだけで、今回は以下の基本式で描画しています。
F(x) = ax + 2(1-a)x2/(1+x)2
描画部分のASコードは以下に示します。これも単純な計算の繰り返しになります。
//各変数の宣言とかは適宜;
//SIZEの値は500 (500×500pxの範囲で描画)
private function drawGumowskyMira(e:Event):void {
// ------------------ Gumowsky-Mira Mapping-------------------
bmp.lock();
for (var j:int = 0; j <= 80; j++) {
_x = 40.0 * (Math.random() - 0.5); //初期値を乱数で与える
_y = 40.0 * (Math.random() - 0.5);
k = Math.floor(256 * (_x * _x + _y * _y)); //色決め
fx=a*x+aa*x*x/(1+x*x);
//写像の繰り返し
for (var i:int = 0; i < 1000; i++) {
x1 = _y+fx;
xx1 = x1*x1;
fx = a*x1+aa*xx1/(1+xx1);
_y = -_x+fx;
_x = x1;
if (Math.abs(_x) < 40.0 && Math.abs(_y) < 40.0) {
pt.x = Math.floor(SIZE / 80 * _x); //ptはPoint型
pt.y = Math.floor(SIZE / 80 * _y);
bmp.setPixel(pt.x + SIZE/2, pt.y + SIZE/2, 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;
}
エノン写像と比べると左右対称的な絵になってます。
ちょっとゾワゾワするというか気持ち悪い、。
個人的にはアシンメトリ?な形が好きなので、こっちよりエノン写像の方が好きです。
関連記事:
・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)でマンデルブロ集合
