1.タートルグラフィクスの基礎
コンピュータの画面上に「亀」がいます。(亀は英語でturtle: タートル)この亀は、命令にしたがって、画面上をまっすぐ進むことと、向きを変えることができます。この亀に適当な指示を与えると、亀が動いたあとが図形を描きます。こうして図形を描くのが「タートルグラフィクス」です。タートルグラフィクスを根幹に置いたプログラミング言語がLOGOです。LOGOは1967年にシーモア・パパートによって開発されましたが、1980年代にパソコンが普及し、学校でも使われるようになると、教育用プログラミング言語として脚光を浴びました。日本でも、「みかんLOGO」などのプログラミング言語が開発されました。現在最もよく使われているのは「ドリトル」でしょう。ドリトルでは、タートルグラフィクスだけではなく、音楽などもできます。
LOGOでは、小学生にもわかるタートルグラフィクスを扱いますので、「座標」や「座標系」という言葉は登場しません。真っ白な紙の上で、「まえへ10」「みぎへ30°」といった命令を実行していきます。しかし、Cinderella上のタートルグラフィクスシステムでは座標を使います。
(1) 亀がどこにいても動かない座標系(原点とx軸、y軸の直交座標)がある。
(2) 亀は動いたあと、常に自分が原点にいて、x軸の正の方向を向いていると思っている。
(1) を「絶対的な座標系」(2)を「相対的な座標系」といいます。
次の図を見てください。
まず、左下の原点と東西方向のx軸、南北方向のy軸、これが絶対的な座標系です。亀はこの原点から出発して動き回りますが、この座標系は変化しません。
赤い矢印は、亀が斜めに移動したことを示します。移動したあと、亀は角θの方向に向きを変えました。亀が向いているのがその時のx軸(上図の矢印)の方向です。そのとき、亀が認識しているのは、ここで斜めにかかれた座標系です。今、亀から見て(2,1)という座標は、図のような場所を示すことになります。
ここで、あなたは亀になったり、亀の動きを見ている人になったり、場合に応じてどちらにでもなれることが必要です。たとえば、亀に1辺が2の正三角形を描かせることを考えましょう。
亀は次の6つの動作をします。
(1) x軸方向に2だけ進んで、そこまで線を引く。
(2) 反時計回りに120°向きを変える。
(3) x軸方向に2だけ進んで、そこまで線を引く。
(4) 反時計回りに120°向きを変える。
(5) x軸方向に2だけ進んで、そこまで線を引く。
(6) 反時計回りに120°向きを変える。
亀は(1)(2)の動作を3回繰り返しているだけです。しかし、亀の動きを見ている人は、亀が正三角形を描いて原点に戻ったと思うでしょう。次の図で緑の点が亀です。
その時々( (2) (4) (6) )での亀が思っている座標系を表示すると次のようになります。赤がx軸、緑がy軸です。
この6つの動作を亀に行なわせるスクリプトを書きましょう。
ポイントは点(a,b)に原点を移動する平行移動によって座標系そのものを平行移動する関数 translate([a,b]) と
角αだけ座標系を原点周りに回転する関数 rotate(α) です。
まず、この2つの関数がどんな働きをするのか、見ておきましょう。
はじめに translate()です。
まず、座標(2,1)に点を打ちました。色は緑です。
次に、translate([3,1])を実行しました。これは、座標系をx軸方向に3,y軸方向に1平行移動するというものです。
したがって、原点が(3,1)に移ります。この関数を実行したあとは、描画面にかかれている座標軸の (3,1) のところを原点とした座標系で計算をします。したがって、3行目で点(2,1)に赤で点を打ちますが、(3,1)から測って(2,1)なので、描画面では(5,2)のところに点が打たれることになります。
次に、rotate()です。
やはり初めに座標(2,1)に点を打ちました。
次に rotate(90°)を実行しました。すると、座標系を90°回転しますので、描画面のy軸がこんどはx軸に、描画面のx軸の負の方向がy軸になります。そこで3行目で赤い点を打つと、画面のように点が打たれるのです。
以上から、亀が動くたびに、translate()とrotate()で座標系を移動させてやれば、亀にとっては常にx軸の正の方向を向いて進むことになります。
先ほどの正三角形の描画で考えると、(1) (3) (5) の、x軸方向に2だけ進んで線を引き座標系も平行移動する動作は draw([0,0],[2,0]) と translate([2,0]) です。
(2) (4) (6) の反時計回りに120°向きを変えるのは rotate(120°) です。
===================================================================
draw([0,0],[2,0]);
translate([2,0]);
rotate(120°);
draw([0,0],[2,0]);
translate([2,0]) ;
rotate(120°);
draw([0,0],[2,0]);
translate([2,0]);
rotate(120°);
draw([0,0]);
===================================================================
最後に、亀をdraw([0,0]) で原点(亀が思っている原点)に表示しています。
CindyScriptが初めての人は、ここまでの手順をこちらのページで詳しく説明していますのでごらん下さい。
さて、正三角形を描くために、同じことを3回繰り返していますね。このようなときは、repeat()関数を使いましょう。書きかたは
repeat(回数,作業)
です。作業の内容がいくつもあるときは、それをセミコロンでつないでいけばよいです。また、次のように改行し、各行の先頭にスペースを入れると構造が読みやすくなります。
===================================================================
repeat(3,
draw([0,0],[2,0]);
translate([2,0]);
rotate(120°);
);
draw([0,0]);
===================================================================
次の練習問題をやってみましょう。うまく描くことができれば、タートルグラフィクスの基礎は修了です。
【練習問題】
(1) 亀に正六角形を描かせてください。
(2) 亀に星形五角形を描かせてください。