NetLogoプログラミング(その2:円を再帰的に描く)

円を任意の場所から任意のサイズで1つ描く手続きは

to circle [:x :y rd ] ;; 円の中心座標が (:x , :y) で半径が rd
  pu
  set heading 90
  setxy :x :y + rd
  pd
  repeat 360 [
    fd PI * rd / 180 rt 1
  ]
  pu
end

となる。

この手続きを利用して、1つの円の内部に、半径が 1/3 のサイズの円とそれに隣接する同サイズの6つの円を並べることを再帰的に行わせることで得られる図形を描きたい。それには、

to setup
  ca
  crt 1
  ask turtles [setxy 0 0 circle cx cy r odr ]
end
to circle [:x :y rd :odr ]
  pu
  set heading 90
  if :odr < 1 [stop]
  setxy :x :y + rd
  pd
  repeat 360 [
   fd PI * rd / 180 rt 1
  ]
  let th 0
  circle :x :y rd / 3 :odr - 1
  repeat 6 [
   circle :x + 2 * rd / 3 * cos th :y + 2 * rd / 3 * sin th rd / 3 :odr - 1
   set th th + 60
  ]
  pu
end

とすれば良い。最初の円の中心と半径、再帰の深さ(odr) は interface 上の Slider で指定できるようにする。

次は、このプログラムの実行結果で、円の中心が (0 , 0) で、半径が 16 、再帰の深さが 4 の場合である。


このプログラムのソースファイルは プログラム にある。


哲猫