うしブログ

うしブログ

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

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

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

On Update スクリプトで点の動きを制御する

設問

GeoGebraで、自由な点オブジェクトAを作成した。
いま、点AのOn Update スクリプトを記述することで、点Aの挙動を以下のように制御したい。そのためのスクリプトを記述しなさい。ただし、点Aを、他のオブジェクトの従属オブジェクトとして再定義することは認めない。

(1)単位円周上だけを動き、かつ偏角が整数度になるようにする。

(2)Angle[A]が整数度になるようにする。

(3)y=sin(x)のグラフ上だけを動くようにする。

(4)y=2xのグラフ上だけを動くようにする。

(5)単位円の内部だけを動くようにする。

(6)単位円の外部だけを動くようにする。

(7)格子点上だけを動くようにする。

(8)x座標、y座標ともに、0.1刻みで動くようにする。

(9)原則として自由に動けるが、ある格子点に近づいたとき(具体的には、当該格子点との距離が0.1以下になったとき)には、当該格子点に吸い付くようにする。

解答例

 以下で紹介するスクリプトは、自由な点オブジェクトAを前提として、点AのOn Update ハンドラに記述するスクリプトである。

単位円周上だけを動き、かつ偏角が整数度になるようにする

SetValue[ A, ( 1; round(Angle[ A ]) ) ]

Angle[A]が整数度になるようにする

SetValue[ A, ( Length[ A ]; round( Angle[ A ] ) ) ]

y=sin(x)のグラフ上だけを動くようにする

SetValue[ A, ClosestPoint[ y=sin(x), A] ]

y=2xのグラフ上だけを動くようにする

SetValue[ A, ClosestPoint[ y=2x, A] ]

単位円の内部だけを動くようにする

SetValue[ A, ClosestPointRegion[ Circle[ (0,0),1 ], A ] ]

単位円の外部だけを動くようにする

If[ Length[A] < 1, SetValue[ A, ( 1; Angle[A] ) ] ]

格子点上だけを動くようにする

SetValue[ A, round(A) ]

x座標、y座標ともに、0.1刻みで動くようにする

SetValue[ A, round(10A) / 10 ]

原則として自由に動けるが、ある格子点に近づいたとき(具体的には、当該格子点との距離が0.1以下になったとき)には、当該格子点に吸い付くようにする

If[ Distance[A,round(A)]<=0.1, SetValue[A,round(A)] ]