パン・ズームをしても消えない残像
解説
オブジェクトの設計
- 自由な点A
そのOn Update スクリプトは、下記のとおり。
If[trace==true,SetValue[tracelist,Append[tracelist,CopyFreeObject[A]]]]
If[trace==true,SetValue[tracelist,Unique[tracelist]]]
- 空のリストtracelist = {}
- 真偽値(チェックボックス)trace
- ボタンbutton1
その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]]]