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 にするのです。
画面左下にコントロールできます。
プレイボタンを押すと正五角形が滑らかに回転します。
作ったものがこのページの下からダウンロードできます。