久々にフリーの休日を手に入れたので、中学の頃に作った利用券を携帯して市の図書館に行ってみた。
なんでかというと、過去、中学校の図書館にはあった Logo の本とかないかなー?と。さすがに書店では絶滅しているので…
で、結論から行くと、2冊の本を発掘しました。が、あまりおもしろいサンプルとかはなく、かなり残念。書籍中では「簡単簡単」と連呼している割に、やけに難しく、かつ、応用性がないなと感じるロジックが多かったです。こんなかったかなあ?
唯一「おお」と思ったのは円の描き方。といっても先日紹介した四角形を描く方法を応用して多角形を描き近似する方法ですが、多の処理系ではわざわざこんな方法は用いませんよね、ということで紹介。
コード
Turtle.Speed = 10
Turtle.X = 20
Turtle.Y = 80
For i=1 To 36
Turtle.Move(10)
Turtle.Turn(10) ' 10°右に曲がれ!
EndFor
結果
これを応用すると、WikipediaのLogoのエントリーで掲示されているような画像が描けます。
コード
Turtle.Speed = 10 Turtle.X = 120 Turtle.Y = 120 a=30 ' 円の数 b = 360 / a c=30 ' 多角形の頂点の数(多いほど円に近い) d = 360 / c For x=1 To a For y=1 To c Turtle.Move(10) Turtle.Turn(d) EndFor Turtle.Turn(b) EndFor
結果
なんか、もうちっょとひねった画像が描けないかなあ。とか考えていたら、確かコッホ曲線とかあったよね。と思って描いてみた。
コード
Turtle.Speed = 10 Turtle.X = 20 Turtle.Y = 100 MaxLevel = 4 ' 操作の回数 LineLength = 4 ' 辺の長さ Turtle.Angle = 90 ' 右水平方向に CurrentLevel = 0 ' コッホ雪片を描く For x=1 To 3 Koch() Turtle.Turn(120) endfor ' コッホ曲線を描く ' # 線を引く→左60°→線を引く→右120°→線を引く→左60°→線を引く Sub Koch CurrentLevel = CurrentLevel + 1 If (CurrentLevel = MaxLevel) Then Turtle.Move(LineLength) Else Koch() Endif Turtle.Turn(-60) If (currentLevel = MaxLevel) Then Turtle.Move(LineLength) Else Koch() Endif Turtle.Turn(120) If (currentLevel = MaxLevel) Then Turtle.Move(LineLength) Else Koch() Endif Turtle.Turn(-60) If (CurrentLevel = MaxLevel) Then Turtle.Move(LineLength) Else Koch() Endif CurrentLevel = CurrentLevel - 1 EndSub
結果
Logo入門といえばコッホ、みたいなイメージがあったんだけど、前述書籍でもぐぐっても出てこない。なんで?なにかの情報と入れ替わっているのかなあ?
ともあれ、なんかひさびさに仕事と全く絡まないコードと戯れた一日となって、なんとなくノスタルジックでした。