最終更新日 2003年8月19日

空間LOGO : KITEのマニュアル
■ 手続きには次のものがあります。
● fd 数式 または forward 数式
 タートル1 が数式の値だけ前進する。
● fd2 数式 または forward2 数式
 タートル2 が数式の値だけ前進する。
● bk 数式 または back 数式
 タートル1 が数式の値だけ後退する。
● bk2 数式 または back2 数式
 タートル2 が数式の値だけ後退する。
● pd または pendown
 タートル1 のペンを下げる。以後、移動すれば、線を描く。初期設定は pd の状態です。
● pd2 または pendown2
 タートル2 のペンを下げる。以後、移動すれば、線を描く。初期設定は pd2 の状態です。
● pu または penup
 タートル1 のペンを上げる。以後、移動しても、線を描かない。初期設定は pd の状態です。
● pu2 または penup2
 タートル2 のペンを上げる。以後、移動しても、線を描かない。初期設定は pd2 の状態です。
● lt 数式 または left 数式
 タートル1 が数式の値だけ左向きに方向を変える。単位は度です。
● lt2 数式 または left2 数式
 タートル2 が数式の値だけ左向きに方向を変える。単位は度です。
● rt 数式 または right 数式
 タートル1 が数式の値だけ右向きに方向を変える。単位は度です。
● rt2 数式 または right2 数式
 タートル2 が数式の値だけ右向きに方向を変える。単位は度です。
● roll 数式
 タートル1 が数式の値だけ左右に方向を変える。正が左、負が右です。単位は度です。
● roll2 数式
 タートル2 が数式の値だけ左右に方向を変える。正が左、負が右です。単位は度です。
● up 数式
 タートル1 が数式の値だけ上向きに方向を変える。単位は度です。
● up2 数式
 タートル2 が数式の値だけ上向きに方向を変える。単位は度です。
● down 数式
 タートル1 が数式の値だけ下向きに方向を変える。単位は度です。
● down2 数式
 タートル2 が数式の値だけ下向きに方向を変える。単位は度です。
● pitch 数式
 タートル1 が数式の値だけ上下に方向を変える。正が上、負が下です。単位は度です。
● pitch2 数式
 タートル2 が数式の値だけ上下に方向を変える。正が上、負が下です。単位は度です。
● yaw 数式
 タートル1 が数式の値だけ左右に姿勢を傾ける。正が右、負が左です。単位は度です。
● yaw2 数式
 タートル2 が数式の値だけ左右に姿勢を傾ける。正が右、負が左です。単位は度です。
● cs または clearscreen
 絵を消し、初期状態に戻す。スタックも空になります。
● repaint
 絵を再描画する。画面の大きさを変えた時や画面が消えた時に使います。
● print 数式
 数式の値を右側のメモに表示します。
● 変数名 = 数式
 変数に数式の値を代入します。変数名は先頭に : のある英数字です。local と共に宣言された変数でなければ、グローバル変数です。変数の値は変数名で得ることができます。
 例:
:X = 30 print sin :X
0.5 が表示されます。
● listing
 ユーザ定義の手続きと関数の名前を左のメモに表示します。
● randomize
 乱数を初期化します。
● stop
 ユーザ定義手続きの中で使い、stop を実行すれば、その手続きを終了します。
● op 数式
 ユーザ定義関数の中で使い、op 数式 を実行すれば、その数式の値を関数の値として関数を終了します。
● local 変数名の並び
 ユーザ定義の手続きと関数の中でローカル変数を定義するのに使います。0 で初期化されます。
 例:
TO F :X
  LOCAL :A 
  :A = :X PRINT :A
END
と手続き F を定義したとき、コマンドラインで :A = 10 F 5 PRINT :A を実行すると 5, 10 と表示する。ローカル変数とグローバル変数と両方あるときはローカル変数が優先される。ローカル変数の値を変えても、グローバル変数の値は変化しない。
注意:ローカル変数の宣言は一行にして下さい。local :x :y のように複数のローカル変数を一度に宣言できるので、上の手続きの定義を
TO F :X
  LOCAL :A :A = :X PRINT :A
END
と定義するとプログラムが混乱して、エラーになります。
例:
TO G :X
  :A = :X PRINT :A
END
と手続き G を定義したとき、コマンドラインで :A = 10 G 5 PRINT :A を実行すると 5, 5 と表示する。グローバル変数の値は手続きまたは関数で値を変えれば、手続きまたは関数から戻ってもその値に変化している。
● st または showturtle
 タートル1 を表示します。初期設定はタートルを表示します。
● st2 または showturtle2
 タートル2 を表示します。初期設定はタートルを表示しません。
● ht または hideturtle
 タートル1 を表示しません。初期設定はタートルを表示します。
● ht2 または hideturtle2
 タートル2 を表示しません。初期設定はタートルを表示しません。
● og 数式 または orthogonal 数式
 正射影で表示します。数式の値が画面の横の大きさです。初期設定は正射影で、数値は300で表示します。
● pg 数式 または perspective 数式
 透視投影で表示します。数式の値は視野角です。pg 45 とか pg 30 とか指定します。
● setcolor 数式1 数式2 数式3
 描く線の色を指定します。数式1 が赤、数式2 が緑、数式3 が青の割合で、0 から 1 の範囲で指定します。setcolor 1 1 1 は白です。初期設定は 1 1 0 で黄色です。
● setbackcolor 数式1 数式2 数式3
 画面の背景の色を指定します。数式1 が赤、数式2 が緑、数式3 が青の割合で、0 から 1 の範囲で指定します。setbackcolor 1 1 1 は白です。初期設定は 0 0 0 で黒です。この命令は画面を紙に印刷したい時に使います。初期設定のままでは、黒い画面に黄色で線が描かれているので、特別な意図がある場合以外は、背景を白にしたほうが良いと思います。そのときはペンの色も上の setcolor 命令で黒などにした方が良いと思います。
● setlinewidth 数式
 描く線の幅を指定します。1が一番小さくです。
● setpos 数式1 数式2 数式3
 タートル1 が数式1 数式2 数式3で示される位置にタートル1 が移動します。
● setpos2 数式1 数式2 数式3
 タートル2 が数式1 数式2 数式3で示される位置にタートル2 が移動します。
● setx 数式
 タートル1 の X 座標が数式の値に変化した位置にタートル1 が移動します。
● setx2 数式
 タートル2 の X 座標が数式の値に変化した位置にタートル2 が移動します。
● sety 数式
 タートル1 の Y 座標が数式の値に変化した位置にタートル1 が移動します。
● sety2 数式
 タートル2 の Y 座標が数式の値に変化した位置にタートル2 が移動します。
● setz 数式
 タートル1 の Z 座標が数式の値に変化した位置にタートル1 が移動します。
● setz2 数式
 タートル2 の Z 座標が数式の値に変化した位置にタートル2 が移動します。
● toward 数式1 数式2 数式3
 数式1 数式2 数式3で示される位置を向くようにタートル1 が向きを変えます。
● toward2
 タートル1のいる位置を向くようにタートル2 が向きを変えます。
● push
 タートル1 の状態をタートル1 用のスタックにプッシュします。スタックの大きさは100個ぶんです。
● push2
 タートル2 の状態をタートル2 用のスタックにプッシュします。スタックの大きさは100個ぶんです。
● pop
 タートル1 用のスタックから保存していた状態をタートル1 に戻します。
● pop2
 タートル2 用のスタックから保存していた状態をタートル2 に戻します。
例:push と pop は組にして、例えば、
TO triangle :side1 :side2
  push fd :side1 rt 90 fd :side2 pop
end
と定義すれば、斜辺でない二辺が :side1 と :side2 である直角三角形を描くプログラムを定義することが出来ます。triangle 30 40 を実行すれば、辺の長さが 30, 40, 50 である直角三角形を描くことが出来ます。しかもこの場合、タートルは描き始める時と描き終わった時とで同じ状態です。
● line 数式1 数式2 数式3 数式4 数式5 数式6
(数式1, 数式2, 数式3) で示される点と(数式4, 数式5, 数式6) で示される点を結ぶ線分を描きます。
● synchro
シンクロ状態になります。タートル2 が移動した時、両方のタートルが PD ならば二匹のタートル間に線が引かれます。例えば、
CS PU FD 100 PD DOWN 90 REPEAT 6 [FD 10 RT 10] PD
ST2 DOWN2 90
SYNCHRO
REPEAT 36 [FD 10 RT 10 FD2 10 RT2 10]
NONSYNCHRO
の様に使います。一葉双曲面が描かれます。
● nonsynchro
 シンクロ状態を抜けます。両方のタートルが独立に動きます。初期状態はシンクロ状態ではありません。
● sleep 数式
 数式の値ミリ秒だけ休止します。
● to 手続き名
 自前の手続きを定義するのに使います。TO 手続き名 をコマンドラインで実行すると手続きや関数を定義する為のダイアログボックスが開きます。 ダイアログボックスのメモの一行目に TO 手続き名 と書いてあります。この一行目も使って、手続きを定義します。例えば、
TO THING
  FD 60 RT 90 FD 60 RT 90 FD 30 RT 90 FD 30 RT 90 FD 60 RT 90
  FD 15 RT 90 FD 15 RT 90 FD 30
END
とダイアログボックスのメモに打ち込み、OK のボタンを押します。これで、組み込み手続きとまったく同様に THING という手続きが使えるようになります。REPEAT 4[THING] や REPEAT 9 [THING RT 10 FD 6] を実行してみましょう。手続きは引数を持つことも出来ます。例えば、
TO POLY :SIDE :ANGLE
  FD :SIDE RT :ANGLE FD :SIDE RT 2 * :ANGLE
END
で POLY という引数を二つ持った手続きを定義します。この定義は再帰的手続きです。POLY 50 125 のように実行します。何時までもぐるぐる回って止まりません。Esc キーを押して停止させます。角度を 30 や 144 や 45 にして実行してみましょう。引数は値渡しです。意味の分からない人は無視して良いです。一回描いたら停止するようにするにはどうしたら良いでしょうか?考えてみてください。
● to 関数名
 自前の関数を定義するのに使います。TO 関数名 をコマンドラインで実行すると手続きや関数を定義する為のダイアログボックスが開きます。 ダイアログボックスのメモの一行目に TO 関数名 と書いてあります。この一行目も使って、関数を定義します。例えば、
TO PRIMEP :N
  IF :N == 1 [OP 0]
  FOR :I=2 TO SQRT :N [IF :N % :I == 0 [OP 0]]
  OP 1
END
と定義すれば、引数が素数かどうか判定する関数を定義できます。素数の時は 1 を、1 または合成数の時は 0 を返すので、条件式に使えます。例えば、
FOR :I= 1 TO 10 [IF PRIMEP :I [PD][PU] FD :30 RT 36]
のように使えます。正十角形の辺に一から十までの番号を付け、素数番目の辺だけ描きます。
■ 制御構造には次のものがあります。
● repeat 数式 [ 手続きの並び ]
 数式の値だけ手続きの並びを繰り返し実行します。
 例:
repeat 4 [fd 100 rt 90]
 一辺 100 の正方形を描きます。
● while 条件式 [ 手続きの並び ]
 条件式が正しい間手続きの並びを繰り返し実行します。
 例:
:i = 4 while :i > 0 [fd 100 rt 90 :i = :i-1]
 一辺 100 の正方形を描きます。
● do [ 手続きの並び ] until 条件式
 まず手続きの並びを一回実行し、以下条件式が正しくない間手続きの並びを繰り返し実行します。
 例:
:i = 4 do [fd 100 rt 90 :i = :i-1] until :i == 0
 一辺 100 の正方形を描きます。
● for 変数名 = 数式 to 数式 step 数式 [ 手続きの並び ]
 まず変数を最初の数式の値で初期化し、二番目の数式の値を超えるまで三番目の数式の値を手続きの並びを実行するたびに加え、手続きの並びを繰り返し実行します。
 例: for :i = 1 to 4 [fd 100 rt 90]
 一辺 100 の正方形を描きます。 step 数式の部分を省略すると増分は 1 になります。
● for 変数名 = 数式 downto 数式 step 数式 [ 手続きの並び ]
 まず変数を最初の数式の値で初期化し、二番目の数式の値を下回るまで三番目の数式の値を手続きの並びを実行するたびに減じ、手続きの並びを繰り返し実行します。
 例:
for :i = 4 downto 1 [fd 100 rt 90]
 一辺 100 の正方形を描きます。 step 数式の部分を省略すると減分は 1 になります。
● continue
 repeat 文、while 文, do until 文, for 文の中で使われ、continue 文以下を省略して、次の繰り返しを実行する。for 文では、増分または減分が行われる。
 例:
for :i=0 to 10 [if :i % 2 == 0 [continue] print :i]
 1, 3, 5, 7, 9 と表示する。
● break
 repeat 文、while 文, do until 文, for 文の中で使われ、break 文を実行すれば、ループを抜け出す。
 例:
for :i=1 to 10 [if :i % 4 == 0 [break] print :i]
 1, 2, 3 と表示する。
● if 条件式 [ 手続きの並び ]
 条件式が真であれば、手続きの並びを実行します。
 例:
if :x == 0 [fd 100]
 もし :x の値が 0 であれば、100 だけ前進します。
● if 条件式 [ 手続きの並び ] [ 手続きの並び ]
 条件式が真であれば、最初の手続きの並びを実行し、偽であれば、二番目の手続きの並びを実行します。
 例:
if :x >= 0 [fd 100] [bk 100]
 もし :x の値が非負であれば、100 だけ前進し、負であれば、100 だけ後退します。
● これらの制御構造は好きなだけネストできます。
 例:
for :i = 1 to 3 [
  for :j = 1 to 3 [
    print :i * :j
  ]
]
 1, 2, 3, 2, 4, 6, 3, 6, 9 と表示する。
条件式は次のようにして作ります。
■ 関係演算子には次のようなものがあります。
● 数式1 == 数式2
 == の両辺の値が等しければ真、そうでなければ偽です。
● 数式1 != 数式2
 != の両辺の値が等しくなければ真、そうでなければ偽です。
● 数式1 > 数式2
 数式1 の値が数式2 の値より大きければ真、そうでなければ偽です。
● 数式1 < 数式2
 数式1 の値が数式2 の値より小さければ真、そうでなければ偽です。
● 数式1 >= 数式2
 数式1 の値が数式2 の値より大きいか等しければ真、そうでなければ偽です。
● 数式1 <= 数式2
 数式1 の値が数式2 の値より小さいか等しければ真、そうでなければ偽です。
■ 論理演算子には次のようなものがあります。
● (条件式1) && (条件式2)
 条件式1 と条件式2 の論理積を取ります。優先順位は *, /, % と同じです。
● (条件式1) || (条件式2)
 条件式1 と条件式2 の論理和を取ります。優先順位は二項演算子 +, - と同じです。
● !(条件式)
 条件式の論理否定を取ります。優先順位は単項演算子 +, - と同じです。
■ 算術演算子には次のようなものがあります。
● + 数式
 単項演算子 + です。あってもなくても同じです。
● - 数式
 単項演算子 - です。数式の値に -1 を掛ける。
● 数式1 * 数式2
 数式1 の値と数式2 の値の積がその値となる。二項演算子 * です。優先順位は /, %, && と同じです。二項演算子 +, - より優先されます。
● 数式1 / 数式2
 数式1 の値と数式2 の値の商がその値となる。二項演算子 / です。優先順位は *, %, && と同じです。二項演算子 +, - より優先されます。
● 数式1 % 数式2
 数式1 の整数値を数式2 の整数値で割った余りがその値となる。二項演算子 % です。優先順位は *, /, && と同じです。二項演算子 +, - より優先されます。
● 数式1 + 数式2
 数式1 の値と数式2 の値の和がその値となる。二項演算子 + です。優先順位は二項演算子 -, || と同じです。二項演算子 *, /, %, && の方が優先されます。
● 数式1 - 数式2
 数式1 の値と数式2 の値の差がその値となる。二項演算子 - です。優先順位は二項演算子 +, || と同じです。二項演算子 *, /, %, && の方が優先されます。
 例:
2 * 3 - 5 と 2 * (3 - 5)
 1 と -4 です。
● ( と )
 ( と ) を使うことで演算子の優先順序を変更できます。
■ 組み込み関数として次のものが使えます。
● sin 数式
 三角関数の sin です。() は必要ありません。単位は度です。
● cos 数式
 三角関数の cos です。() は必要ありません。単位は度です。
● tan 数式
 三角関数の tan です。() は必要ありません。単位は度です。
● asin 数式
 逆三角関数の arcsin です。() は必要ありません。度で返されます。
● acos 数式
 逆三角関数の arccos です。() は必要ありません。度で返されます。 acos 関数を使えば、三辺の長さが与えられた三角形を描く手続きを余弦法則を使って作ることが出来ます。
TO SANKAKU :A :B :C
  FD :A
  RT 180 - ACOS (:A*:A+:B*:B-:C*:C)/(2*:A*:B)
  FD :B
  RT 180 - ACOS (:B*:B+:C*:C-:A*:A)/(2*:B*:C)
  FD :C
  RT 180 - ACOS (:C*:C+:A*:A-:B*:B)/(2*:C*:A)
END
と定義すれば良いです。
● atan 数式
 逆三角関数の arctan です。() は必要ありません。度で返されます。
● atan2 数式1 数式2
 逆三角関数の arctan(数式1 の値 / 数式2 の値) です。() は必要ありません。度で返されます。
● pow 数式1 数式2
 数式1 の値の数式2 の値乗です。() は必要ありません。
● log 数式
 対数関数の log です。() は必要ありません。底は e です。
● exp 数式
 指数関数の exp です。() は必要ありません。底は e です。
● sqrt 数式
 数式の値の平方根を返します。() は必要ありません。
● abs 数式
 数式の値の絶対値を返します。() は必要ありません。
● floor 数式
 数式の値以下の最大の整数値を返します。() は必要ありません。
● ceil 数式
 数式の値以上の最小の整数値を返します。() は必要ありません。
● quotient 数式1 数式2
 数式1 の値を整数値に切り捨てたものを数式2 の値を整数値に切り捨てたもので割った商です。() は必要ありません。
● random 数式
 0 から 数式の値 - 1 までの整数値の乱数を返します。() は必要ありません。
● rand
 0 から 1 の実数値の乱数を返します。
● pi
 円周率の値を返します。
● tx
 タートル1 の X 座標を返します。
● tx2
 タートル2 の X 座標を返します。
● ty
 タートル1 の Y 座標を返します。
● ty2
 タートル2 の Y 座標を返します。
● tz
 タートル1 の Z 座標を返します。
● tz2
 タートル2 の Z 座標を返します。
● distance 数式1 数式2 数式3
 タートル1 と数式1 数式2 数式3 で示される位置の間の距離を返します。
● distance2
 タートル2 とタートル1 の間の距離を返します。
● linewidth
 線の幅を返します。
■ 定数は数字の並び(例: 123)や数字の並び.数字の並び(例:2.15)や数字の並び E (+/-) 数字の並び(例:12E-20、2E3) や数字の並び.数字の並び E(+/-) 数字の並び(例:1.23E10, 2.0e-2)です。
■ 数式や条件式は定数、変数、関数を零個以上の演算子で組み合わせて作ります。真理値の偽は 0 真は 0 以外の数で実際は機能します。

KITEに戻る

ホームページに戻る

数学教育を改善するためのソフト開発に戻る