うしブログ

うしブログ

趣味で運営する、GeoGebraの専門ブログ。

(作業メモ)StartPoint要検証(2行の場合;テキスト変更時未定義問題)

(要修復)ToggleButton・RollPolygonWithoutSlipping・貯金時計・直感力トレーニング

GeogebraのOn Updateスクリプトについて

GeogebraのOn Updateスクリプト

Geogebraでは、オブジェクトの定義が更新されたときに、一定の命令を実行することができます。

ここでは、On Updateスクリプトの挙動について詳しく調べます。

 

数値オブジェクトの更新

 

f:id:usiblog:20160621232547p:plain

上図のように、数値オブジェクト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のままでした。

f:id:usiblog:20160621233140p:plain

したがって、aの上記On Updateスクリプトは、If条件が、aの更新直後に満たされるときに発動することが分かります。

 

点オブジェクトの更新

f:id:usiblog:20160621233827p:plain

上図のように、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が来るようになります。

f:id:usiblog:20160621234757p:plain

したがって、点Aの上記On Updateスクリプトにおけるx(A), y(A)は、点Aの更新直後の座標を指していることが分かります。

 

真偽値オブジェクトの更新

f:id:usiblog:20160622000020p:plain

上図のように、真偽値オブジェクト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スクリプトに記述する命令は、そのオブジェクトが更新された直後の状態に対して実行されます。