うしブログ

うしブログ

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

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

パン・ズームをしても消えない残像

パン・ズームをしても消えない残像 – GeoGebra

解説

オブジェクトの設計
  • 自由な点A

そのOn Update スクリプトは、下記のとおり。

If[trace==true,SetValue[tracelist,Append[tracelist,CopyFreeObject[A]]]]
If[trace==true,SetValue[tracelist,Unique[tracelist]]]

そのOn Click スクリプトは、下記のとおり。

SetValue[tracelist,{}]

オブジェクトは以上です。

基本的な仕組み 

点AのOn Update スクリプトとして、

SetValue[tracelist,Append[tracelist,CopyFreeObject[A]]]

と記述すると、点Aが動くたびに、現在の点Aと同一座標・同一スタイルである自由な点オブジェクト(CopyFreeObject[A])を、tracelistに追加する。

その結果、tracelistが、点Aの残像としての機能を果たす。

tracelistは、点のリストであるから、パンやズームをしても消えないし、各点の座標は変わらない。

その他の工夫

なお、上記アプレットでは、チェックボックスtraceがtrueのときのみ、上記スクリプトを実行するようにしている。つまり、上記スクリプトをIfで包み、

If[trace==true, SetValue[tracelist,Append[tracelist,CopyFreeObject[A]]] ]

としている(点AのOn Update スクリプト1行目)。

さらに、上記アプレットでは、処理をできるだけ軽くするための工夫をしている。点Aが同じ座標を複数回通ったときには、tracelistに同じ座標の点が複数記録される。しかし、残像を表示すればいいわけだから、同じ座標の点を複数記録しておく意味はない。リストは、要素数が増えれば増えるほど、処理が重くなる。そこで、重複を削除するスクリプトを、以下のように記述している(点AのOn Update スクリプト2行目)。

If[trace==true,SetValue[tracelist,Unique[tracelist]]]