うしブログ

うしブログ

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

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

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

あるオブジェクトのOn Update スクリプトと、そのオブジェクトに従属する、他のオブジェクトの再計算の実行順序

専門的な記事になりますが、GeogebraのOn Update スクリプトを理解するうえで重要な内容です。

 

 

アプレットの説明

点A、点Cは、x軸上の任意の点です。

点Bは、点Aに依存するオブジェクトであり、( x(A)+1, 0 )で定義されています。

 

アプレット下部の「←」「→」ボタンをクリックすると、以下のコマンドが実行されることにより、点Aを左右に動かすことができます。

「←」ボタン

SetValue[A,(x(A)-0.5,0)]

「→」ボタン

SetValue[A,(x(A)+0.5,0)]

 

スクリプティング

「AのOn Update スクリプトに設定」チェックボックスをチェックすると、点AのOn Update スクリプトに以下の内容が記述されます。ここでは、「行頭にUpdateConstruction[ ]を記述」チェックボックスはチェックしないでください(チェックした場合の挙動については後述します)。

SetValue[C,B]

 

「BのOn Update スクリプトに設定」チェックボックスをチェックすると、点BのOn Update スクリプトに以下の内容が記述されます。その際には、点AのOn Update スクリプトは消去されるように設定しています。

SetValue[C,B]

 

挙動の確認

ボタンを押すと、点Aはもちろん、それに依存している点Bも座標が更新されるため、一見、どちらの点のOn Update スクリプトに記述しようと、挙動は変わらないようにも思われます。

しかし、実際に比較してみると、点AのOn Update スクリプトに記述した場合には、点Cは、更新前の点Bの座標に移動しているのに対し、点BのOn Update スクリプトに記述した場合には、点Cは、更新後の点Bの座標に移動していることが分かります。

 

点AのOn Update スクリプトに記述した場合

点Aの座標が更新される

点AのOn Update スクリプトが実行される

点Aに依存しているオブジェクト(点B)が更新される

 

点BのOn Update スクリプトに記述した場合

点Aの座標が更新される

点Aに依存しているオブジェクト(点B)が更新される

点BのOn Update スクリプトが実行される

 

このことから、あるオブジェクトPのOn Update スクリプトの実行による他のオブジェクトQの更新は、QがPに依存していることから起こる再計算によるQの更新に優先することが分かります。

 

UpdateConstruction コマンドを使用した場合

「AのOn Update スクリプトに設定」チェックボックスをチェックし、さらに「行頭にUpdateConstruction[ ]を記述」チェックボックスをチェックすると、点AのOn Update スクリプトに以下の内容が記述されます。

UpdateConstruction[ ]

SetValue[C,B]

 この場合の挙動は、点BのOn Update スクリプトにSetValue[C,B]を記述した場合と同様に、点Cが、更新後の点Bの座標に移動します。

 

挙動の分析

①点Aの座標が更新される

②点AのOn Update スクリプト1行目が実行されることで、点Aに依存しているオブジェクト(点B)が再計算される

③点AのOn Update スクリプト2行目が実行されることで、点Cの座標が再計算後の点Bの座標に設定される

④点Aに依存しているオブジェクト(点B)が更新される

 

補足

仮に点BにOn Update スクリプトが記述されていたとして、上記②で、UpdateConstruction[ ] コマンドによって点Bが再計算されたとしても、その時点では点BのOn Update スクリプトは実行されず、あくまで④で実行されます。