最終更新日 2004年1月28日
KITE2の使い方
では、KITE2.EXE を立ち上げてみましょう。

画面が三つの領域に分かれています。黒い画面にある白い球面がタートルが線画を描くキャンバスです。画面の真中にいる飛行機が一匹目のタートルです。下の領域がタートルに対する命令を打ち込む領域です。左側の領域がPRINT命令の結果やLISTING命令の結果が表示される領域です。それぞれの大きさを変化させることも出来ます。
下の領域にHTと打ち込みEnterキーを押すと飛行機が消えます。HT は HideTurtle の省略形です。以下、Enterキーを押すという指示は省略します。命令はすべて半角文字で指示します。このソフトは大文字と小文字を区別しません。従って、例えば、HT命令はhtでもHtでもhTでもいいです。

STと打つと飛行機が現れます。ST は ShowTurtle の省略形です。飛行機を消し、ST2と打ち込むと亀が現れます。これが二匹目のタートルです。

CSと打ち込むと初期状態に戻ります。CS は ClearScreen の省略形です。タートル(亀)は二匹います。初期状態では二匹のタートルは経度と緯度(単位は度)を使った座標系で考えた球面の原点(0,0)に居て、一番目のタートルだけが見えています。球面が画面で、原点は球面の中央です。球面の半径は関数 RADIUS で得ることが出来ます。三次元の座標軸はX軸が画面の左右で、Y軸が画面の上下で、Z軸が画面の前後です。両方のタートルがペンを下ろしています。移動すると線を描きます。ペンを上げると移動しても線を描きません。二匹目のタートルに対する命令や関数は 2 の添字が付きます。PU命令は一番目のタートルがペンを上げます。PU は PenUp の省略形です。PU2命令は二番目のタートルがペンを上げます。PD命令は一番目のタートルがペンを下ろします。PD は PenDown の省略形です。PD2命令は二番目のタートルがペンを下ろします。TOWARD 命令と DISTANCE 関数が二つのタートルで仕様が異なりますが、他の命令や関数は2が付けば二番目のタートルに対する同様な命令や関数です。
CS命令を実行して、初期状態に戻してください。タートルは原点で北極の向きを向いています。色々確かめていると分かってくると思いますので最初はあまり気にしないで下さい。FD 100 を実行します。(即ち、下の領域に FD 100 と打ち込みEnterキーを押す。FD と 100 の間にはスペースが必要です。以下、同様)。飛行機が100単位だけ前進します。FD 数値は数値の値だけ前進せよという命令で、FD は FORWARD の省略形です。BK 数値は数値の値だけ後退せよという命令で、BK は BACK の省略形です。球面の半径はradius という定数関数で得られます。従って。タートルが乗っている球面の一周は正確には2×π×radius ですが、だいたい1000です。

RT 120 を実行します。飛行機が右に120度回転します。RT 数値は右回りに数値の値だけ回転せよという命令で、RT は RIGHT の省略形です。LT 数値は左回りに数値の値だけ回転せよという命令で、LT は LEFT の省略形です。

FD 100 RT 120 を三回繰り返すと平面や空間なら正三角形を描いて元の位置に戻ります。しかし球面上では閉じた図形にはなりません。球面上では三角形の内角の和は180度ではないからです。

同じことを何回も繰り返すのは大変です。REPEAT 命令を使うと楽が出来ます。
REPEAT 3 [FD 100 RT 120]
とすれば、[ と ] の間の命令を 3 回繰り返します。REPEAT 数値 [ 命令の列 ] で命令の列を数値の値の回数繰り返します。

簡単に正確な三角形を描きたい場合には、二辺夾角を指定して三角形を描くことが出来ます。タートルの位置をスタックに覚えておく PUSH とスタックから取り出す POP という命令を使います。
PUSH FD 100 RT 90 FD 100 POP
とすれば、二辺が100で夾角が90度である正確な三角形を描きます。

三角形を何個も描きたい時、何時も PUSH FD 100 RT 90 FD 100 POP と打ち込むのは大変です。コンピュータに三角形の描き方を教えてやりましょう。TO SANKAKU と打ち込みます。手続きや関数を定義する為のダイアログボックスが開きます。

ダイアログボックスのメモの一行目に TO SANKAKU と書いてあります。二行目に PUSH FD 100 RT 90 FD 100 POP と打ち込み、三行目に END と打ち込みます。ダイアログボックスのメモが
TO SANKAKU
PUSH FD 100 RT 90 FD 100 POP
END
となっていることを確かめたら、OK ボタンを押します。

定義の最後には必ず END と打ち込んでください。END が手続きや関数の定義の終了の印で、必ず必要です。
■■■■■■■■■■
● 手続きの定義の仕方 ●
SANKAKU という名前の手続きを定義するには、コマンドラインに(即ち、下側の領域に) TO SANKAKU と打ち込みます。手続きや関数を定義する為のダイアログボックスが開きます。 ダイアログボックスのメモの一行目に TO SANKAKU と書いてあります。二行目に PUSH FD 100 RT 90 FD 100 POP と打ち込み、三行目に END と打ち込みます。ダイアログボックスのメモは
TO SANKAKU
PUSH FD 100 RT 90 FD 100 POP
END
となります。ダイアログボックスの下のほうにある OK と描かれたボタンを押します。これで SANKAKU という手続きをコンピュータが理解するようになります。
コマンドラインに(即ち、下側の領域に)
TO SANKAKU
PUSH FD 100 RT 90 FD 100 POP
END
と打ち込むのではありませんので、くれぐれも間違わないようにしてください。
■■■■■■■■■■
LISTING 命令を実行してみます。左の領域に SANKAKU と表示されるはずです。SANKAKU という命令をコンピュータが覚えました。

CS 命令を実行し、初期画面に戻し、SANKAKU と打ち込んでEnterキーを押して下さい。三角形が描かれたはずです。エラーが表示されたら、何と言っているか良く読んでください。例えば SANKAKU と打ち込んだつもりが SANNKAKU の場合はもう一度打ち直せば良いです。

SANKAKU の定義の中にエラーがあると言っていれば、例えば、
TO SANKAKU
PUSH FD 100 RR 90 FD 100 POP
END
と入力していると次のようになります。

OK のボタンを押し、もう一度 TO SANKAKU を実行します。コンピュータに教えた SANKAKU の定義の書かれたダイアログボックスが出てきますから、間違いを直して、OK ボタンを押して、やり直してください。
この自分で定義した命令も FD や RT のような組み込みの手続きと同様に使うことが出来ます。
REPEAT 4[SANKAKU RT 90]
を実行してください。原点を中心に三角形を90度づつ回転しながら4個描いたはずです。自分で定義した手続きも自由に、FD や RT と同様使えます。

■■■■■■■■■■
● 画面を拡大・縮小したり、ダイアログボックスを表示して絵が消えた場合 ●
本来なら絵が消えないようにプログラミングすべきですが、今のところ方法が分かりません。REPAINT 命令を打ち込んで下さい。絵が復元できます。
■■■■■■■■■■
毎回同じ形の三角形では面白くありません。TO SANKAKU と打ち込んでください。
KITE2 を新たに立ち上げたのでなければ、
TO SANKAKU
PUSH FD 100 RT 90 FD 100 POP
END
と書かれたダイアログボックスが現れるはずです。次のように修正します。
TO SANKAKU :SIZE1 :ANGLE :SIZE2
PUSH FD :SIZE1 RT :ANGLE FD :SIZE2 POP
END
正しく打ち込めたことを確かめて、OK ボタンを押します。

■■■■■■■■■■
TO SANKAKU :SIZE1 :ANGLE :SIZE2
PUSH FD :SIZE1 RT :ANGLE FD :SIZE2 POP
END
というプログラムを示すと一行目から全部改めて打ち込んで
TO SANKAKU
TO SANKAKU :SIZE1 :ANGLE :SIZE2
PUSH FD :SIZE1 RT :ANGLE FD :SIZE2 POP
END
となっている人がよくいます。これはエラーになります。初めて TO SANKAKU を実行したときもコンピュータが作ってくれる TO SANKAKU を利用して、ダイアログボックスのメモの内容を
TO SANKAKU :SIZE1 :ANGLE :SIZE2
PUSH FD :SIZE1 RT :ANGLE FD :SIZE2 POP
END
としてください。
■■■■■■■■■■
CS 命令で、画面を初期化し、SANKAKU 100 90 100 と打ち込みます。二辺が100単位で夾角が90度の三角形を描くはずです。

次に、
FOR :I = 10 TO 150 STEP 20 [SANKAKU :I 90 :I]
を実行します。この命令は :I を最初は 10 とし、その値が 150 を超えなければ、一回 [ と ] で囲まれた命令の列を実行し、:I に 20 を加え、その値が 150 を超えなければ、一回 [ と ] で囲まれた命令の列を実行し、:I に 20 を加え、その値が 150 を超えなければ、一回 [ と ] で囲まれた命令の列を実行しを繰り返します。従って、二辺が10, 30, 50, 70, 90, 110, 130, 150 単位で夾角が90の三角形を続けて描きます。

■■■■■■■■■■
正確な三角形を fd と rt で描くには球面幾何学の法則の知識が必要になります。辺の余弦法則と角の余弦法則です。
cos a = cos b cos c + sin b sin c cos A
と
cos A = - cos B cos C + sin B sin C cos a
です。一辺100の正三角形を描くには次のような手続きを定義します。
to sankaku :size
local :angle :side
:side = :size / radius * 180 / pi
:angle = acos ((cos :side )-(cos :side)*(cos :side))/((sin :side)*(sin :side))
:angle = 180 - :angle
repeat 3 [fd :size rt :angle]
end
sankaku 100 を実行すれば、一辺100の正三角形を描きます。

球面三角形は三つの角を指定してもただ一つに決まります。各角度が70度の正三角形を描くには次のような手続きを定義します。
to sankaku2 :kaku
local :size :side :angle
:side = acos ((cos :kaku)+(cos :kaku)*(cos :kaku))/((sin :kaku)*(sin :kaku))
:size = :side * pi / 180 * radius
:angle = 180 - :kaku
repeat 3 [fd :size rt :angle]
end
sakaku2 70 を実行すれば、各角が70度である正三角形を描きます。

三辺を与えて三角形を描く手続きや三角を与えて三角形を描く手続きを作ってみて下さい。さらに、正方形、正五角形、正六角形、正七角形、星型正五角形、星型正七角形など色々描いて見ましょう。正方形、正五角形、正六角形、正七角形、星型正五角形、星型正七角形などを描くにはどのような手続きを作ればよいか考えてみて下さい。小さいプログラムをたくさん作るのが上達の秘訣です。
■■■■■■■■■■
● 作ったプログラムを保存したい時 ●
作ったプログラムはメニューの Fileの Save で保存することが出来ます。その時覚えているすべてのプログラムを保存します。ファイル名は任意の名前を付けれます。エディタで覗いてみると分かりますが単なるテキストファイルです。従って、各自の好みのエディタでプログラムを作り、メニューの File の Open でプログラムを読み込み、コンピュータに自作の命令を実行させることも出来ます。
保存したプログラムはメニューの File の Open でプログラムを読み込むことが出来ます。どのような手続きや関数が読み込まれたかは LISTING 命令で確かめることが出来ます。
■■■■■■■■■■
● 作った図形を印刷したい時 ●
KITE で描いた画面を印刷したい時は、メニューの File の Print を実行します。しかし、一般には、初期設定では、画面の背景が黒で、ペンの色が黄色です。そのまま印刷するとインクが無駄になります。印刷したい時は、背景を SetBackColor 数式1 数式2 数式3 命令で白にしておくほうが良いです。SetBackColor 命令の引数は RGB 形式で色を指定します。数式1 の値が赤の明るさ、数式2 の値が緑の明るさ、数式3 の値が青の明るさで、1 1 1 は白、 0 0 0 は黒、 1 0 0 は赤、 0 1 0 は緑、 0 0 1 は青、 1 1 0 は黄色、 0.5 0.5 0.5 は灰色などです。それぞれの数値は 0 から 1 の実数値で指定します。背景色を白にしたときは、SetColor 数式1 数式2 数式3 命令でペンの色を黒などの見やすい色に変えて描いたほうが良いです。初期設定で、背景色を黒にしているのは、OpenGL のデフォルトが黒で、画面で見るには黒のほうが見やすいと考えたからです。印刷するときに自動的に色を反転して印刷するようにすると良いとも考えますが、コンピュータグラフィックスの経験が少なくて、プログラムの仕方が分かりません。今後の課題とさせてください。
■■■■■■■■■■
Synchro という命令を導入しました。Synchro 命令を実行した時には、シンクロ状態になり、二匹目のタートルが移動した時、両方のタートルが PD ならば二匹のタートル間に線が引かれます。NonSynchro 命令を実行すれば、シンクロ状態を抜けます。初期状態はシンクロ状態ではありません。例えば次のように使います。
CS PU FD 250 PD ST2 RT2 90
SYNCHRO
REPEAT 36 [FD2 2*radius * pi /36]
NONSYNCHRO
を実行してみましょう。

■■■■■■■■■■
もっと面白い絵を描いてみましょう。
TO tetra
local :short :long
:short = pi*radius*54.7333/180
:long = pi*radius*70.5333/180
push
setcolor 1 0 0 fd 2*pi*radius rt 60
setcolor 0 1 0 fd 2*pi*radius rt 60
setcolor 0 0 1 fd 2*pi*radius rt 60
pu fd :long pd rt 60
setcolor 1 1 0 fd 2*pi*radius rt 60
setcolor 1 0 1 fd 2*pi*radius rt 60
pu bk :short pd rt 90
setcolor 0 1 1 fd 2*pi*radius rt 90
pu pop
end
と定義して、tetra を実行してみましょう。

setlinewidth 5 を実行すると線の幅が大きくなります。線の幅は linewidth で得られます。

HS または hidesphere で球面を消してください。SS または showsphere で球面が現れます。

今度は、surface 0.7 を実行してください。線が球の中心を結ぶ線に沿って面を構成します。数値は0から1の間で指定します。nosurface で元に戻ります。

これは多面角万華鏡の一つ4面角万華鏡です。 他の二つはKITE2のサンプルプログラムに挙げてあります。
画面をマウスでドラッグする事により球面を回転することができます。

■■■■■■■■■■
主な使い方は紹介しましたが、まだまだたくさんの機能があります。マニュアルやサンプルプログラムを読んで面白い図を描いてください。面白いプログラムが出来たら、作者にも教えてください。osamu@cc.kochi-u.ac.jp までメールをいただければ幸いです。答えられるかどうか分かりませんがバグ情報やこんな機能があれば非常に便利だというものを思いつかれたら同様に教えてください。では、球面 LOGO の世界をお楽しみください。LOGO の本格的な参考書は TURTLE GEOMETRY がお勧めです。