Scripting Physical EnvironmentsJ物理的環境のプログラム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 の命令文 drawforces() を書くならば、すべての重力、クーロン力、物体の相互作用などが計測され、流れとして描かれます。探索粒子は、質量 = 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行付け加えなければなりません。 count=0; つぎの図は、ゲームの間に撮られたスナップショットを表します。どんなふうに黄色の球が飛んでいき、青の球が出てくるかを見てください。
Contributors to this page: Akira Iritani
. The content on this page is licensed under the terms of the License. |
Login |