GeogebraのOn Updateスクリプトについて
GeogebraのOn Updateスクリプト
Geogebraでは、オブジェクトの定義が更新されたときに、一定の命令を実行することができます。
ここでは、On Updateスクリプトの挙動について詳しく調べます。
数値オブジェクトの更新
上図のように、数値オブジェクトaと、真偽値オブジェクトswitchを用意します。
aは、0〜5を、1刻みで動くように設定しています。
aのOn Updateスクリプトとして、以下を記述します。
If[a==3, SetValue[switch,true]]
すると、a=2からa=3になった瞬間、およびa=4からa=3になった瞬間に、switchの値がtrueになりました。
そして、a=3かつswitch=falseの状態で、aを2または4に動かしても、switchはfalseのままでした。
したがって、aの上記On Updateスクリプトは、If条件が、aの更新直後に満たされるときに発動することが分かります。
点オブジェクトの更新
上図のように、A=(0,0), B=(3,3)を用意します。
なおオブジェクトは間隔1のグリッド上に固定しています。オブジェクトをグリッド上の固定する設定について、詳しくは下記記事を参照。
点AのOn Updateスクリプトとして、以下を記述します。
SetCoords[B, x(A), y(A)+1]
この状態で点Aをドラッグすると、点Bのx座標は、ドラッグ後の点Aのx座標と等しくなり、y座標はドラッグ後の点Aのy座標+1となります。つまり常に点Aの1つ上に点Bが来るようになります。
したがって、点Aの上記On Updateスクリプトにおけるx(A), y(A)は、点Aの更新直後の座標を指していることが分かります。
真偽値オブジェクトの更新
上図のように、真偽値オブジェクトswitch1, switch2を用意します。以下の仕組みを実現したいときには、どうすれば良いでしょうか。
switch1にチェックを入れているときは、switch2が空白であるようにする。
switch2にチェックを入れているときは、switch1が空白であるようにする。
つまり、両チェックボックスに同時にチェックが入らないようにする。
両チェックボックスが同時に空白である状態は認める。
上記の仕組みは、以下のようにスクリプトを記述すれば、実現できます。
switch1のOn Update スクリプト
If[switch1==true,SetValue[switch2,false]]
switch2のOn Update スクリプト
If[switch2==true,SetValue[switch1,false]]
つまり上記スクリプトは、チェックボックスを操作して真偽値オブジェクトが更新された直後において、その真偽値オブジェクトの値がtrueである場合に、他の真偽値オブジェクトの値をfalseにする命令です。
まとめ
あるオブジェクトのOn Updateスクリプトに記述する命令は、そのオブジェクトが更新された直後の状態に対して実行されます。