オブジェクトを連動させて移動する
【課題】
以下をすべて満たすアプレットを、Geogebraで作成せよ。
①直線x=a を作成する。ただし、aは-10<=a<=8の範囲で、0.1刻みで変化する変数であり、直線x=aとx軸との交点Aをドラッグすることで、直線x=aを上記の範囲および刻み間隔で動かせるようにする。
②直線x=a+2を作成する。ただし、直線x=a+2とx軸との交点Bをドラッグすると、直線x=a+2が-10<=a<=8の範囲で、0.1刻みで動かすことができ、かつそれに連動して直線x=aも動くようにする。
【見本】
【解説】
用いるオブジェクト
list1:点Aの可動領域を-10<=x<=8に限定し、点Aを0.1刻みでドラッグできるようにするための、点のリストです。
list2:点Bの可動領域を-8<=x<=10に限定し、点Bを0.1刻みでドラッグできるようにするための、点のリストです。
On Updateスクリプト
点Aと点Bは、一方を動かすと、それに連動して他方が動く関係にする必要があります。
うまくいかない例
①あるオブジェクトに依存するオブジェクトはドラッグで動かせない。
A: point[list1] →ドラッグすることで、list1上を自由に移動できる。
B: (x(A)+2, 0) →ドラッグで動かせない。
Segment[A, (x(A)+2, 0)] →ドラッグで動かせない。
②相互依存型の定義はできない。
A: point[list1]
B: (x(A)+2,0)
SetCoords[A, x(B)-2,0] →無効
うまくいく方法
オブジェクトを連動させて移動させるのは、Geogebraでは非常に難しいです。しかし、On Updateスクリプトを上手に使えば、可能だということが分かりました。
点Aをドラッグで動かした場合(On Update)に、点Bのx座標を、「点Aの座標+2」に変更するよう、SetCoordsコマンドを打っておく。
かつ、
点Bをドラッグで動かした場合(On Update)に、点Aのx座標を、「点Bの座標-2」に変更するよう、SetCoordsコマンドを打っておく。
※SetCoordsは座標を変更する場合に使い、SetValueは変数の値、またはオブジェクトの定義式を変更するときに使います。
SetValueを用いて、オブジェクトの定義式を変更する例:直線オブジェクトpが、p: x=2.3として定義されているときに、SetValue[p, x=5]は、直線pをx=5に変更します。
点A
点B