タートルグラフィックス
参考サイト:
- http://ja.wikipedia.org/wiki/LOGO
- http://www.calormen.com/logo/
- http://gihyo.jp/dev/serial/01/enjoy-pg/0003
- モナドのサンプルとして:
http://d.hatena.ne.jp/m-hiyama/20090804/1249357682
http://d.hatena.ne.jp/m-hiyama-memo/20090804/1249348511
作るときの注意:
コマンド:
名前と引数 | 省略形 | |
---|---|---|
forwarcd(dist) | fd | |
back(dist) | bk | |
left(ang) | lt | |
right(ang) | rt | |
pendown() | pd | |
penup() | pu | |
setpencolor(color) | spc(ここだけ) | |
showturtle() | st | |
hideturtle() | ht | |
clearscreen | cs | |
home() | ||
clean() | ||
setpos(pos) | ||
setxy(x, y) | ||
setx(x) | ||
sety(y) |
クエリー:
名前と引数 | 戻り値 | 省略形 |
---|---|---|
pos() | pos | |
xcor() | number | |
ycor() | number | |
shownp() | boolean | sp(ここだけ) |
pendownp() | boolean | pdp(ここだけ) |
pencolor() | color | pc(ここだけ) |
- シングルタートル
- コマンドとクエリーはすべて大域関数で、単一のタートルに作用する。
- 初期化(再初期化)コマンドは必要で、initTG() とでもする。
- タートルグラフィックスのコマンド/クエリー以外は、通常のJavaScriptを使ってプログラミングする。
- マルチタートルをどうするか? 考えるのも面白い。
- 3Dワールドも面白い。30年前に既に3D-LOGOはあったけど。
タートルプログラミングは、省略形があるコマンドだけでやるのが面白い。pos, x, y は余り使わない。
再帰と繰り返しが楽しい。配列のforEachなども使える。
それと、
[追記]
fd, bk, rt, lt, pd, pu, spc(setpencolor)だけでも十分。とりあえず、これだけ実装でもお絵描きに不足はない。
もともとLOGOは対話的なので、テキストエディタを使ってプログラミングするのではなくて、コンソールを使ってトライ&エラー方式で絵を描き、手続きがわかったらプログラムにしてみるようなやり方。コーディングよりは、その場で経験を重ねる。
- 長さや距離はピクセル単位なので、整数値のみ。ただし、負数は逆方向を示すので使ってよい。
- 角度も整数値を使う。最小単位は1度。任意の整数値を mod 360 (余りが0から359)で考える。
- 1度は 2π/360 ラジアン。小数部を適当に端折って計算する。
- 使いやすくした cos, sin を仮に util.c(dist, ang), util.s(dist, ang) とでもすると、長さdistで角度(適当に基準を決める)angの射線(矢印)に対する、x方向の射影の長さが util.c(dist, ang)、y方向の射影の長さが util.s(dist, ang)。
- 座標は学校で習った方式がよい(y軸上向き)。
他に、repeat(n, func) という高階関数を準備しておくと便利。実際のLOGOにもrepeatはある。[0, 1, ..., n-1].forEach(func) でもだいたい同じだが、簡潔に書ける。
LOGOは、子供に経験を与えるツール環境。プログラミング学習でもなんでも、もっとも重要なのは手を動かして具体的な経験をすることで、「作って使う」ことによって自分が亀にのり移った具体的な経験をして欲しい。
[/追記]