B GeoGebraスクリプト

On Clickハンドラ

点Aがあるとします。「移動」ツールを選択した状態で点Aをクリックすると、見出しが変更されるようなGeoGebraスクリプトを作成してみます。

SetCaption[A, GetTime["\H:\i:\s"]]

というGeoGebraスクリプトを、点Aのプロパティダイアログの「スクリプティング」タブに記述します。このとき、On Clickハンドラに記述しているか、スクリプトの種類がGeoGebraになっているかに注意します。

SetCaption[<オブジェクト>, <テキスト>] は、オブジェクトの見出しを変更する命令で、

GetTime[<フォーマット文字列>]は、指定したフォーマットで日付や時刻の文字列を返す命令で、ここでは「時:分:秒」を返します。したがって、点Aをクリックするたびに点のラベルが現在時刻に変更されます。

新しいオブジェクトの量産の抑制

今度は点Aをクリックするたびに、現在時刻をテキストオブジェクトで作図するGeoGebraスクリプトを作成してみます。

Text[GetTime["\H:\i:\s"]]

このコードを点AのOn Clickハンドラに記述して、グラフィックスビューで点Aをクリックすると、原点付近に現在時刻のテキストが作成されます。しかし、もう一度クリックすると、もうひとつテキストオブジェクトができてしまいます。下図右では、2つのテキストが重なって作成されています。

これを避けるためには、作成されるオブジェクトに名前を与えるような、

text1 = Text[GetTime["\H:\i:\s"]]

というコードを、点AのOn Clickハンドラに記述すると、毎回text1が更新されることになり、毎回新しいオブジェクトが作成されることがなくなります。

On Updateハンドラ

On Updateハンドラにスクリプトを記述すると、オブジェクトの状態が変更されるたびにスクリプトが実行されます。スライダーaを作図し、On Updateハンドラに

text1 = Text[a]

というコードを記述すると、スライダーの値が変更されるたびに、原点付近のテキストオブジェクトに、その時点でのスライダーの値が表示されます。オブジェクトにtext1という名前を与えたため、新しいオブジェクトが量産されるのではなく、text1というオブジェクトが更新されることになります。

ボタン

スクリプトを記述することに特化したボタンオブジェクトがあります。ボタンツールで作成できます。

ボタンツールを選択してグラフィックスビューをクリックすると、GeoGebraスクリプトをOn Clickハンドラに入力するダイアログが表示されます。また、プロパティダイアログを用いれば、後からも入力・変更できますし、Javascriptの入力もできます。

上のようにボタンにコードを記述すると、複数の命令を一覧してコードを作成でき、コードを一部変更して作図をやり直したいときも、コードを変更したらボタンをクリックするだけで一気に全てのコードを実行しますので、作業の手間はかなり省けます。上のようなコードを、入力バーで試行錯誤して完成することを考えると、利点がはっきりすると思います。

上のコードは点Aが直線 y = 1 上を動くときの、三角形ABCの垂心Mの軌跡を作図するGeoGebraスクリプトで、ボタンをクリックすると、下のように垂心の軌跡が作図されます。

まとめ

GeoGebraスクリプトは入力バーと同等のことしかできませんが、

    • オブジェクトのクリックや、スライダーの変更に反応して、命令を実行できる

    • 多くの命令を一覧して編集でき、一度に実行できる

という利点があります。