物理的環境のプログラム
CindyScript で
CindyLab の可能性を広げる多くの方法があります。ここで、2,3の例を示します。まず、
CindyScript は、物理的量を見るオシロスコープや力の場をプロットするための命令文のような、いくつかの特殊演算を提供します。一方、
CindyScriptは、物理的シミュレーション に関連するほとんどのパラメータに直接アクセスします。さらに、
CindyScriptは、
CindyLabの要素の物理的機能を使用可能にしたり不可能にしたりできます。このように、
CindyLabで機械のような振舞いを実行することができます。 ここに、
CindyLabとともに使う
CindyScriptのいくつかの例を示します。
オシロスコープ
drawcurves(position,list_of_values)
命令は幾何学表示で曲線を描きます。ここで
position
は、オシロスコープが描かれる位置で、
list_of_values は、視覚的に見せるためのいくつかの大きさを含む
CindyScriptのリストです。この命令の最も簡単な使用法は次のプログラムで示されます。
drawcurves((0,0),[B.x,B.y])
ここで x と y は、点Bが表示される座標です。Bが恒星の周りを回る点であれば、次のような図になります。
 |
惑星の動きの曲線 |
初期状態では、曲線の描かれる範囲は値の範囲によって自動的に決まります。
drawcurves(...)
命令では、背景色や、曲線の色、文字の表示など描画のための多くのパラメータが設定できます。詳しくは
CindyScript のリファレンスマニュアルをご覧ください。次の図は、連結された調和的発振子の動きに
drawcurves
命令を使った例を示します。
 |
連結された発振子の動き |
ここでは、望ましい色と文字の表示のために多くの修飾子が使われました。 この例は、以下の
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 をサポートするためにデザインされた
CindyScriptt のもうひとつの命令文はdrawforces 命令です。この命令文により、描画領域内のいたるところで方向と強さを視覚化できます。このためには、仮想的な探索粒子を画面上を横切らせ、異なる点で力を計測します。 簡単に
CindyScript の命令文
を書くならば、すべての重力、クーロン力、物体の相互作用などが計測され、流れとして描かれます。探索粒子は、質量 = 1, 電荷 = 1, 半径 = 1 として標準化されています。たとえば、正反対の電荷をもつ2つの荷電粒子は
drawforces()
命令で、次のような流れの図を描き出します。
 |
単純な静電場 |
drawcurves()
命令と同様、
drawforces()
命令にも多くの修飾子があります。それらは、
CindyScript リファレンスで詳しく説明されています。ここで、少し高度な例を示します。
 |
もう一つの単純な静電場 |
この流れの図を作ったプログラムの一部では、いくつかの修飾子を使っています。
drawforces(stream->true,
color->(1,1,1),
factor->3,
resolution->5)
特に,
stream->true
文は、通常の力の場の表示を、より精密な流れの図を与える小さな針の流れの図で置き換えます。
CindyLab の筋書きのプログラム
CindyScript は
CindyLab のすべてのパラメータに関与できるので、複雑な動作を実行することも可能です。例として、簡単な卓球のゲームを示しましょう。まず、反射壁で卓球台の縁を描きます。別の反射壁を、ラケットのように、球を打つものとして、幾何学的に自由に動けるようにつくります。最後に、球を速度を持つ粒子として加えます。ここまでは、
CindyLab とシンデレラだけで作ります。設定はすでにできていて、これだけでゲームができます。ただし、球が画面から出てしまうと永久に戻ってきません。
 | |  |
卓球ゲームを作る | |
球が飛んでいってしまう |
そこで
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行付け加えなければなりません。
つぎの図は、ゲームの間に撮られたスナップショットを表します。どんなふうに黄色の球が飛んでいき、青の球が出てくるかを見てください。
 |
卓球ゲームのプログラム |