A01 アステロイド

軌跡とアニメーションの例です。

アステロイド曲線そのものは,媒介表示 x=cos(t)^3 , y=sin(t)^3 で描けますが,ここでやろうとしているのは,動円と定円の半径比が 1:4 のときの内サイクロイドとしてのアステロイドです。

Cinderellaでは,必要な幾何要素は作図ツールで作図し,それらをCindyscriptでコントロールすることになります。

動円の半径を1とすれば,アステロイドでは定円の半径は4になりますが,GeoGebraの例と同様にこれをスライダで設定することにします。すると,一般の内サイクロイドにも対応できます。

スライダは作図ツールで線分をとり,その上に点をのせます。線分がAB,点がCだとすると

r=ceil(|A,C|/|A,B|*8)+1;

で1〜9の整数値が取得できます。

スライダ上の点Cの下に値を表示するには

drawtext(C-[0.2,0.6],"r="+r);

とします。[0.2,0.6] は適当な値です。文字を大きくするには

drawtext(C-[0.2,0.6],"r="+r,size->16);

のように,size 修飾子(オプション)をつけます。フォントサイズです。

Shift+Enter でスクリプトを実行します。

次に,原点中心の円を「半径つき円を加える」で適当に作図します。

この円の識別子をC0とすると(識別子はインスペクタの「要素の情報」か,表示メニューの「式による表示」で見ることができます)

C0.radius=r;

で半径をrにすることができます。

次に動円です。「固定した半径の円を加える」ツールで半径1として作図するのがよいでしょう。中心はスクリプトでコントロールするので適当でよいです。

もうひとつ,定円上に点をとります。

これで要素は揃いました。あとはスクリプトです。

まず,動点Fの位置から角度を求めます。

th=F.angle;

この角 th を用いると,動円の中心Eの座標は

E.xy=E.xy=(r-1)*[cos(th),sin(th)];

となります。

次に,軌跡を描く点ですが,これは作図ツールではとりません。このあと,点Fを円周上をドラッグしていくことを考えると,始点が重なったときにFだけを選択するのが難しくなるためです。軌跡を描く点はスクリプトで描きます。

draw(E.xy+[cos(-(r-1)*th),sin(-(r-1)*th)]);

小さな緑の点が表示されます。

点Fをドラッグすると円Eも動き,緑の点が回転していくように見えます。

最後に,点の軌跡を描きます。点の位置は th で表されているわけですから,これを媒介変数とした形の式で描きます。定義域を0からth とすれば,始点から現在地までが描かれます。

ここまでのスクリプトをまとめると次のようになります。

r=ceil(|A,C|/|A,B|*8)+1;

drawtext(C-[0.2,0.6],"r="+r,size->16);

C0.radius=r;

th=F.angle;

E.xy=(r-1)*[cos(th),sin(th)];

draw(E.xy+[cos(-(r-1)*th),sin(-(r-1)*th)]);

plot((r-1)*[cos(t),sin(t)]+[cos(-(r-1)*t),sin(-(r-1)*t)],start->0,stop->th);

Shift+Enter でスクリプトを実行します。

次に,これをアニメーションにするには,GeoGebraのようにスライダーを作って自動で動かすのではなく,コンピュータの内部時計を利用して th を動かします。

まず,Simulation Start スロットに

resetclock();

を書きます。内部時計の現在の時刻を0にします。

次に,Timer Tick スロットに

th=seconds();

を書きます。内部時計から時刻を取得します。

Timer Tickスロットにスクリプトを書くと,画面左下にアニメーションのコントローラができます。

先ほどは点Fの位置で th を取得していたので,Drawスロットの

th=F.angle;

を消して,

F.xy=r*[cos(th),sin(th)];

に書き換えます。

さらに,点EとFの初期位置を Initialization スロットで決めます。

r=ceil(|A,C|/|A,B|*8)+1;

E.xy=[r-1,0];

F.xy=[r,0];

1行目がDrawスロットの記述と重複しますが,これがないとrが決まりません。

Web上で動かせるものをこちらに用意しました。コントローラがはっきりしませんが,左側が PLAY,右側が STOP です。

このページの下からダウンロードすることもできます。