スクリプティング
物理的環境のプログラム¶
CindyScript)CindyScript((") で CindyLab の可能性を広げる多くの方法があります。ここで、2,3の例を示します。まず、 CindyScript は、物理的量を見るオシロスコープや力の場をプロットするための命令文のような、いくつかの特殊演算を提供します。一方、CindyScript)CindyScript((")は、物理的シミュレーション に関連するほとんどのパラメータに直接アクセスします。さらに、CindyScript)CindyScript((")は、 CindyLabの要素の物理的機能を使用可能にしたり不可能にしたりできます。このように、 CindyLabで機械のような振舞いを実行することができます。 ここに、CindyLabとともに使うCindyScript)CindyScript((")のいくつかの例を示します。
オシロスコープ¶
drawcurves(position,list_of_values) 命令は幾何学表示で曲線を描きます。ここで position は、オシロスコープが描かれる位置で、 list_of_values は、視覚的に見せるためのいくつかの大きさを含むCindyScript)CindyScript((")のリストです。この命令の最も簡単な使用法は次のプログラムで示されます。
ここで x と y は、点Bが表示される座標です。Bが恒星の周りを回る点であれば、次のような図になります。
初期状態では、曲線の描かれる範囲は値の範囲によって自動的に決まります。 drawcurves(...) 命令では、背景色や、曲線の色、文字の表示など描画のための多くのパラメータが設定できます。詳しくは CindyScript)CindyScript((") のリファレンスマニュアルをご覧ください。次の図は、連結された調和的発振子の動きに drawcurves 命令を使った例を示します。
ここでは、望ましい色と文字の表示のために多くの修飾子が使われました。 この例は、以下の CindyScript)CindyScript((") プログラムを使って作りました。
linecolor((1,1,1));
drawcurves((-7,-3),
textcolor((1,1,1)); (A.x,B.x,A.ke,B.ke,a.pe+b.pe+c.pe),
height->50,
color->(1,1,1),
back->(0,0,0),
backalpha->1,showranges->true,
range->"peek",width->400,
colors->[
[1,0.5,0.5],
[0.5,1,0.5],
[1,0.5,0.5],
[0.5,1,0.5],
[0.5,0.5,1]],
texts->[
"PosA = "+ A.x,
"PosB = "+B.x,
"EnergyA = "+A.ke,
"EnergyB = "+B.ke,
"PostentialEnergy = "+(a.pe+b.pe+c.pe)
]);
力の場¶
CindyLab をサポートするためにデザインされた CindyScript)CindyScript((")t のもうひとつの命令文はdrawforces 命令です。この命令文により、描画領域内のいたるところで方向と強さを視覚化できます。このためには、仮想的な探索粒子を画面上を横切らせ、異なる点で力を計測します。 簡単に CindyScript)CindyScript((") の命令文
を書くならば、すべての重力、クーロン力、物体の相互作用などが計測され、流れとして描かれます。探索粒子は、質量 = 1, 電荷 = 1, 半径 = 1 として標準化されています。たとえば、正反対の電荷をもつ2つの荷電粒子は drawforces() 命令で、次のような流れの図を描き出します。
drawcurves() 命令と同様、 drawforces() 命令にも多くの修飾子があります。それらは、 CindyScript)CindyScript((") リファレンスで詳しく説明されています。ここで、少し高度な例を示します。
この流れの図を作ったプログラムの一部では、いくつかの修飾子を使っています。
特に, stream->true 文は、通常の力の場の表示を、より精密な流れの図を与える小さな針の流れの図で置き換えます。
CindyLab の筋書きのプログラム¶
CindyScript)CindyScript((") は CindyLab のすべてのパラメータに関与できるので、複雑な動作を実行することも可能です。例として、簡単な卓球のゲームを示しましょう。まず、反射壁で卓球台の縁を描きます。別の反射壁を、ラケットのように、球を打つものとして、幾何学的に自由に動けるようにつくります。最後に、球を速度を持つ粒子として加えます。ここまでは、CindyLab とシンデレラだけで作ります。設定はすでにできていて、これだけでゲームができます。ただし、球が画面から出てしまうと永久に戻ってきません。
そこで CindyScript)CindyScript((") が登場します。CindyScript)CindyScript((") によって、球が画面から出ていってしまったかどうかを検出し、それに対応することができます。次のプログラムでは、 if(H.x>D.x+9,....の行で、球が出ていってしまったかどうかを検出します。もし、そうであれば、新しい球をランダムな位置と速度、色で出します。さらに、カウンターが何個の球が失われたかを数えるのに使われます。
if(H.x>D.x+9,
H.x=F.x;
r=random();
H.y=(r*D.y+(1-r)*G.y);
w=random()*pi/2+3*pi/4;
H.vx=-cos(w)*.4;
H.vy=sin(w)*.4;
H.color=(hue(random()));
count=count+1;
);
drawtext((-1,-3),"Missed balls: "+count,size->20);
カウンターを初期化するために、simulation start タグにカウンターをゼロにする行を1行付け加えなければなりません。
つぎの図は、ゲームの間に撮られたスナップショットを表します。どんなふうに黄色の球が飛んでいき、青の球が出てくるかを見てください。