スクリプティング - Cinderella Documentation
Description: The user's guide to the Interactive Geometry Software Cinderella

コンテンツにスキップ

# スクリプティング

## 物理的環境のプログラム

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((")のリストです。この命令の最も簡単な使用法は次のプログラムで示されます。

    drawcurves((0,0),[B.x,B.y])

ここで x と y は、点Ｂが表示される座標です。Ｂが恒星の周りを回る点であれば、次のような図になります。

惑星の動きの曲線

初期状態では、曲線の描かれる範囲は値の範囲によって自動的に決まります。 `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((") の命令文

    drawforces()

を書くならば、すべての重力、クーロン力、物体の相互作用などが計測され、流れとして描かれます。探索粒子は、質量 = 1, 電荷 = 1, 半径 = 1　として標準化されています。たとえば、正反対の電荷をもつ2つの荷電粒子は `drawforces()` 命令で、次のような流れの図を描き出します。

単純な静電場

`drawcurves()` 命令と同様、 `drawforces()` 命令にも多くの修飾子があります。それらは、 CindyScript)CindyScript((") リファレンスで詳しく説明されています。ここで、少し高度な例を示します。

この流れの図を作ったプログラムの一部では、いくつかの修飾子を使っています。

もう一つの単純な静電場

    drawforces(stream->true,
                  color->(1,1,1),
                  factor->3,
                  resolution->5)

特に, `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行付け加えなければなりません。

    count=0;

つぎの図は、ゲームの間に撮られたスナップショットを表します。どんなふうに黄色の球が飛んでいき、青の球が出てくるかを見てください。

卓球ゲームのプログラム