Gumowsky-Mira Map – Flex(AS3.0)

gumowskymira.jpg
Gumowsky-Mira Map DEMO

グモウスキー・ミラ写像を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)でマンデルブロ集合

あわせて読む:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です