グモウスキー・ミラ写像をFlex(ActionScript3.0)で。
前回のエノン写像と同様、非線形写像というやつです。
エノン写像との違いは描画に使う式が少し違うだけで、今回は以下の基本式で描画しています。
F(x) = ax + 2(1-a)x2/(1+x)2
描画部分のASコードは以下に示します。これも単純な計算の繰り返しになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
//各変数の宣言とかは適宜; //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)でマンデルブロ集合