うしブログ

うしブログ

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

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

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

On Update スクリプトに関する本質的問題

問題

GeoGebraで、自由な点オブジェクトA:(1,1)、および自由な点オブジェクトB:(3,1)を作成した。

そして、数値オブジェクトa:Distance[A,B]を作成した。

このとき、下記のそれぞれのGeoGebraスクリプトを、点AのOn Updateの欄に記述して、入力バーにSetValue[A,(2,1)]を入力して実行した場合に、点Bの座標がいくつになるかを答えよ。

 

(1)

SetValue[B,(x(B)+Distance[A,B],y(B))]

 

(2)

SetValue[B,(x(B)+a,y(B))]

 

(3)

UpdateConstruction[ ]
SetValue[B,(x(B)+Distance[A,B],y(B))]

 

(4)

UpdateConstruction[ ]
SetValue[B,(x(B)+a,y(B))]

 

解答

(1)(4,1)

 

(2)(5,1)

 

(3)(4,1)

 

(4)(4,1)

 

解説

あるオブジェクト(ここではAという名前のオブジェクトとします)のOn Update の欄に記述したオブジェクトは、オブジェクト名に「A」が入っている場合には、更新後の状態のオブジェクトを表し、それ以外の場合には更新前の状態のオブジェクトを表します。

設問でいうと、(1)に登場するDistance[A,B]というオブジェクトは、名前に「A」が入っていますので、点Aを更新したあとの状態における2点A,Bの距離(すなわち1)を表します。一方で、設問(2)に登場するaというオブジェクトは、名前に「A」は入っていませんので、点Aを更新する前の状態における2点A,Bの距離(すなわち2)を表すということになります。設問(1)と(2)の違いは、これが原因となっています。

ただし、UpdateConstruction[ ]以下のスクリプトに関しては、名前にかかわらず、すべてのオブジェクトが、更新後の状態のオブジェクトとして扱われます。設問(3)2行目のDistance[A,B]も、設問(4)2行目のaも、ともに点Aが更新されたあとの2点A,Bの距離(すなわち1)を表しています。そのため、設問(1)(3)(4)は結果が一致します。