Perl:四角い渦を巻くように配列をチェックするスプリクト

20141205perl
四角い渦巻きを描くように、配列をチェックするスプリクトの覚書。


 頂点だけ拾って四角い渦巻きを書くのは簡単にできたけど、1ステップずつ順番に座標を拾ってくプログラムは以外に難しく1日考えてしまった。

 下のプログラムを実行すると上記画像のような四角い渦を巻くようなxとyを座標を出力します。

プログラムソース


$x=50;   #任意の値
$y=50;   #任意の値

 $add=0;   #増加量
 $next=0;  #次の増加ポイント
 $count_shift=0;  #方向変更用:カウンターの0調整
 $direction=0;  #進行方向

 for ($i=0;$i<=20;$i++){

    print "$x,$y";
    #ここに処理を入れれば中央から処理

    if ($i==$next){
        $add++;
        $count_shift=$next;
        $next=$i+$add*2;
    }

    if ( ($i-$count_shift) % $add == 0 ){
        $direction++;
        if ($direction == 4){ $direction=0; }
    }

    if    ($direction == 1 ){
        $x--;
    }elsif($direction == 2 ){
        $y--;
    }elsif($direction == 3 ){
        $x++;
    }else{    #$direction == 0 と同じ
        $y++;
    }

    #ここに処理を入れれば中央を処理せず一つ連れた所から処理

}


結果

50,50
49,50
49,49
50,49
51,49
・
以下略

後半の「$x--;$y--;$x++;$y++」を入れ替えると、回転方向が変わります。

コメントを残す

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

CAPTCHA