Scripting Physical EnvironmentsJ

print

物理的環境のプログラム


 CindyScriptCindyLab の可能性を広げる多くの方法があります。ここで、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 の筋書きのプログラム


CindyScriptCindyLab のすべてのパラメータに関与できるので、複雑な動作を実行することも可能です。例として、簡単な卓球のゲームを示しましょう。まず、反射壁で卓球台の縁を描きます。別の反射壁を、ラケットのように、球を打つものとして、幾何学的に自由に動けるようにつくります。最後に、球を速度を持つ粒子として加えます。ここまでは、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 .
Page last modified on Wednesday 03 of August, 2011 [00:18:50 UTC] by Akira Iritani.

The content on this page is licensed under the terms of the License.


Menu