turugina #6826(2008/07/24 23:13 GMT) [ Perl ] Rating1/1=1.00
2次元ランダムウォークを描け というお題だと解釈しました。 というわけで、Image::Magickで描いてみました。
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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
use strict; use warnings; use List::Util qw/min max/; use Image::Magick; # 歩く回数 my $count = 10000; sub _walk { int(rand(3))-1; } # 歩いて範囲を測定 my @current = (0,0); my @area = (@current, @current); my @footmarks; for my $fm (map { [_walk, _walk] } 1 .. $count) { $current[0] += $fm->[0]; $current[1] += $fm->[1]; $area[0] = min $area[0], $current[0]; $area[1] = min $area[1], $current[1]; $area[2] = max $area[2], $current[0]; $area[3] = max $area[3], $current[1]; push @footmarks, [@current]; } # 軌跡を書く my $grid = 8; my $lsize = 2; my $img = Image::Magick->new; $img->Set( size=>join(q/x/, map { ($_+1) * $grid } $area[2]-$area[0], $area[3]-$area[1]) ); $img->Read(q/xc:white/); $img->Draw(primitive => q/polyline/, stroke => q/black/, strokewidth => $lsize, points => join(q/ /, map { join q/,/, map { $_ * $grid + $grid/2 } @$_ } map { [$_->[0]-$area[0],$_->[1]-$area[1]] } @footmarks) ); # start地点にバッテン $img->Draw(primitive => q/line/, stroke => q/red/, strokewidth => $lsize/2, points => join(q/ /, map { join q/,/, map { $_ * $grid } @$_ } map { [$_-$area[0], $_-$area[1]] } 0, 1) ); $img->Draw(primitive => q/line/, stroke => q/red/, strokewidth => $lsize/2, points => join(q/ /, map { join q/,/, map { $_ * $grid } @$_ } map { [$_->[0]-$area[0], $_->[1]-$area[1]] } [1,0], [0,1]) ); $img->Write(q/rwalk.png/);
Rating1/1=1.00-0+
[ reply ]
turugina
#6826()
[
Perl
]
Rating1/1=1.00
Rating1/1=1.00-0+
[ reply ]