2014年6月18日水曜日

Chaotic 2D map Gingerbreadman カオス・マップ ジンジャーブレッドマン

範囲 (-38, -38) - (80, 80)をプロットした
ブレッドマンの中心部を切り出し。背景は黒にした

 Gingerbreadman map(ジンジャーブレッドマン) は以下の式で計算されるカオスマップです。
Xn = 1-Yn-1+|Xn-1|
Yn=Xn
初期値は-20から20の間です。
 色付けは初期値ごとに適当に決めました。
 FractMus’ countersで決める方法もあるようです。 つまり、計算した座標のベクトル(sqrt(x*x+y*y))を計算し、それで色を決める方法らしいです。

 効率や恰好などを全然考えていませんが、一応Perlのソースを以下にコピーしました。
use strict;
use GD::Simple;
my @init = (7.5, -7.2, -39.6679279211404,-39.6679279211404,81.6679279211404,81.6679279211404);
my $x0 = $init[0];
my $y0 = $init[1];
my $max=5000;
my $maxTry = 1000;
my $i = 0;
my $minx = $init[2];
my $miny = $init[3];
my $maxx = $init[4];
my $maxy = $init[5];
sub transform {
 my @ret = ();
 my ($x, $y, $minx, $miny, $maxx, $maxy, $w, $h) = @_;
 $ret[0] = int (($x-$minx)*$w/($maxx-$minx));
 $ret[1] = int (($y-$miny)*$h/($maxy-$miny));
 return @ret;
}
my $imgW = 2048;
my $imgH = 2048;
my $imgWOut = $imgW;
my $imgHOut = $imgH;
# create a new image
my $img = GD::Simple->new($imgWOut,$imgHOut);
# draw a red rectangle with blue borders
$img->bgcolor('black');
$img->fgcolor('green');
my $black = $img->colorAllocate(0,0,0);
my $green = $img->colorAllocate(0,255,0);
$img->rectangle(0,0,$imgWOut,$imgHOut,$black);
$img->fill(50,50,$black);
my @colors = ();
for ($i=1; $i<=4; $i++) {
  my $val = $i*64%256;
  $colors[$i*6+0] = $img->colorAllocate($val,    0,    0);
  $colors[$i*6+1] = $img->colorAllocate(   0, $val,    0);
  $colors[$i*6+2] = $img->colorAllocate(   0,    0, $val);
  $colors[$i*6+3] = $img->colorAllocate($val, $val,    0);
  $colors[$i*6+4] = $img->colorAllocate($val,    0, $val);
  $colors[$i*6+5] = $img->colorAllocate(   0, $val, $val);
}
$img->transparent($black);
my $i = 0;
my $j = 0;
for ($j=0; $j<$maxTry; $j++) {
  for ($i=0; $i<$max; $i++) {
    my $x1 = 1-$y0+abs($x0);
    my $y1 = $x0;
    my ($xt, $yt) = transform($x1, $y1, $minx, $miny, $maxx, $maxy, $imgW, $imgH);
    $img->setPixel($xt, $yt, $colors[$j%25]);
    $x0 = $x1;
    $y0 = $y1;
  }
  $x0 = rand 40;
  $x0 -= 20;
  $y0 = rand 40;
  $y0 -= 20;
}
#output the image
open( OUT, "> gingerBreadMan.png") or die( "Cannot open file: graph.jpg" );
binmode OUT;
print OUT $img->png;

参考リンク
List of chaotic maps
Part 2. Chaotic Maps

0 件のコメント:

コメントを投稿