C Cindyscriptの例

回転する正五角形

ボタンを押すたびに原点中心に30°ずつ回転する,単位円に内接する正五角形を作図してみます。

まず正五角形を描きます。頂点を p1,p2,p3,p4,p5 として,座標を決めますが,p1がx軸の正の方向となす角をthとすれば,他の点の座標はthで表せるわけです。

thの初期値を Initialization スロットに書いておきます。

次に,Drawスロットに点の座標の設定と五角形の描画命令を書きます。

p1=[cos(th),sin(th)];

p2=[cos(th+2*pi/5),sin(th+2*pi/5)];

p3=[cos(th+4*pi/5),sin(th+4*pi/5)];

p4=[cos(th+6*pi/5),sin(th+6*pi/5)];

p5=[cos(th+8*pi/5),sin(th+8*pi/5)];

drawpoly([p1,p2,p3,p4,p5]);

とすれば正五角形が描けます。

が,ちょっと待ってください。

多角形を描く drawpoly() の引数は頂点のリストです。

それならば,p1〜p5 を同じような式でコピーしながら書かなくても,一度にリストにできるのです。

pt=apply(1..5,[cos(th+2*#*pi/5),sin(th+2*#*pi/5)]);

drawpoly(pt);

の2行でできてしまいます。

apply(リスト、処理)は,リストの各要素に処理を施した結果をリストにします。

1..5 は[1,2,3,4,5] というリストを作ります。

# はこのリストの要素を示します。つまり,1,2,3,4,5 と変化します。

これで5点の座標のリストptができるので drawpoly(pt) で正五角形が描けるのです。

次にボタンを作ります。ボタンの作り方は,前項「B Cindyscript」にあります。

「文字を追加する」ツールで「回転」という文字を書き,インスペクタでボタン化してスクリプトを書きます。

th=th+pi/6

これでボタンを押すと30°ずつ回転します。

回転をアニメーションで行う

こんどは回転をアニメーションで行うようにします。

Simulation Start スロットに

resetclock();

を書いておきます。内部時計から取得する時刻を0にします。

次に Timer Tick スロットに

th=seconds();

を書きます。内部時計を取得して th にするのです。

画面左下にコントロールできます。

プレイボタンを押すと正五角形が滑らかに回転します。

作ったものがこのページの下からダウンロードできます。