Sample5
to triangle :size
repeat 3 [forward :size right 120]
end
to sample5 :size
repeat 6 [
triangle :size
forward / :size 2
right 60
triangle / :size 2
]
end
![](../img/s05.gif)
sample5 100 として実行しました。
特に説明は、いらないでしょう。
三角形を描いたら、その中に半分の大きさで三角形を描いているだけですね。
でも、むだな動きをしていますね。同じ所を何度も、なぞっているので線が少々汚くなってしまいました。
Sample6
to triangle_fill :size :fcolor
local "current.color
make "current.color pencolor
repeat 3 [forward :size right 120]
right 30
penup
forward / :size 2
setpc :fcolor
pendown
fill
penup
back / :size 2
left 30
setpc :current.color
pendown
end
to sample6_sub :size
repeat 6 [
triangle :size
forward / :size 2
right 60
triangle_fill / :size 2 pick butmember "WHITE butmember "BLACK colors
]
end
to sample6 :size [:fill.flag "true] 1
make "size (* / :size 7 2)
local "current.xy
make "current.xy getxy
local "job
penup
right 60
forward / :size 2
left 60
pendown
if fill.flag [
make "job list "sample6_sub :size
] [
make "job list "sample5 :size
]
repeat 6 [
run :job
left 60
forward / :size 2
]
penup
setxy :current.xy
pendown
end
![](../img/s06.gif)
sample6 200 として実行しました。
sample5を懲りずに繰り返してみました。
手続きの第1引数を、省略すると小さい三角形を塗りつぶします。
※引数の番号は、0から始まります。
実際の動作は、変数 job
に指示リストを簡単に、組み立てているだけです。
塗りつぶさない場合は、(sample6 200 "false)
とタイプして下さい。
塗りつぶす色は、colors
の中からBLACKとWHITEを、butmemberで仲間はずれにして、その中から
pick で無作為に1色だけ選びます。
三角形内を、塗りつぶす方法は多少めんどうくさいけど、手続きtriangle_fillしか思いつきませんでした。
![](../img/bret.gif)
Sample7
to sample7 :size
make "size2 (* / :size 7 2)
local "current.xy
make "current.xy getxy
local "angle
make "angle (+ heading 60)
local "reduce
make "reduce (* :size 0.25)
(sample6 :size false)
penup
repeat 6 [
setheading :angle
forward :size2
pendown
(sample6 :reduce true)
penup
setxy :current.xy
make "angle (+ :angle 60)
]
(sample6 :reduce true)
end
![](../img/s07.gif)
sample7 300で実行しています。
繰り返しは、力なり。:-D
今度は、sample6 を繰り返しています。
まず先に、塗りつぶし無しでsample6を描いています。
その中に、塗りつぶし有りのsample6を、描きました。
同じ図形を、繰り返して描く事で、面白い図形になったりします。
再帰手続きを使えば、もっと面白い図形が描けますが、これはしばらく後のお楽しみです。
![](../img/bret.gif)
|