アニメーションと CindyLab
現実の世界の多くの装置は、何らかのモーターで駆動されます。抽象的なレベルでは、モーターとは、エネルギーをシステムに注ぎ込むものです。それは、自由質点間の純粋な相互作用を超える運動を引き起こします。
CindyLab には、外部力による駆動と環境によるシミュレーションのコントロールを考慮に入れる3つの原則があります。
このあと、この3つの可能性について、略述していきます。可能な相互作用の展開は無数にあるので、基本的な原則だけに焦点を絞って2,3の実例を挙げていきます。
バネの作動
バネの作動は、おそらく
CindyLab でシミュレーションをするときの最も本質的な方法です。それは、
バネの節で議論されています。バネの静止長を周期的に変えることができます。環境設定で若干の摩擦力を加えるならば、周期運動のためにバネを使うことができます。 バネ の節で説明したように、振幅と位相を独立して変えることができます。次の図は、振幅が同じで位相が異なるいくつかのバネの動作を示します。
 |
同じ振幅で位相の異なるバネの動作 |
バネの動作を用いた典型的な例は小さな歩く機械の足で、それぞれ特有の位相を持ったバネで構成されています。次の図では、それぞれの足の2つのバネは0.25だけずらした位相で動作します。それぞれの足は、他の足とは位相がずれています。その結果、4本の足で歩くことができます。
 |
歩く足 |
この装置が
CindyLab の 床 の上に落とされると、小さな生き物のように、自動的に歩き始めます。
 |
床の上で歩く機械 |
幾何学的アニメーション
シンデレラの幾何学部分では、
アニメーション モードにより、点を動かす標準的な方法があります。ここでは、例えば、円周上や線分上で点を動かすことができます。シンデレラのアニメーションモードは、
CindyLab でシームレスに機能します。動かす点に物理的属性をつけたり、それらをバネでつなぐことができます。次の図で、しなやかなロープのようなものは、いくつかのゴムバンドをつないで作りました。 ゴムひもの片方の端点は緑色の点に固定されています。もう一方の端点は、シンデレラのアニメーションによって動かされます。円周上を回転する点は、いくつかのゴムひもの端点を周期的に上下するのに使われます。
 |
振動する波のアニメーション |
質量を持つ点を直接アニメーションで使うこともできます。次の例は、物理的には全く非現実的ですが、アニメーションで質量を持つ点が使えるというデモです。ここで、 惑星 は円周上にあります。アニメーションで恒星は円周上を回ります。図は、回転している恒星の引力のもとでの惑星の動きを示します。
 |
回転する恒星の周りをまわる惑星 |
アニメーションは物理シミュレーションと同期します。これは、アニメーション速度スライダーを動かすと、物理シミュレーションとアニメーションそのものの両方が遅くなることを意味します。
CindyScript による運動シミュレーション
通常、
CindyScript はシミュレーションに関する最も柔軟で強力な方法を提供します。
CindyScript により、 位置, 速度, 静止長 パラメータのような
CindyLab の要素を直接支配することができます。このため、
CindyScript のプログラムが実行されるときは、いつでも物理的要素の挙動を支配できます。
CindyScript のマニュアルで説明されるように、このスクリプト言語は、特定の時刻に動作させることができます。詳細なリストは
CindyLab と CindyScriptで見つけられるでしょう。
原則的に、
CindyScript は、物体のパラメータに"最終値"があるので、どんな物理的な振舞いでも変更することができます。例えば、粒子の速度をプログラム的に変えることができます。次の例は、動くものの上のバネのバランスをとるための簡単な制御プログラムを示します。
 | |
 |
バランスをとるアザラシ 開始前
| |
バランスをとるアザラシ 歩行中
|
アザラシの鼻の点がCです。バネのもう一方の点がDです。
CindyScript の次の行が点Cの水平速度を変更するために機能します。
if(C.x < D.x,C.vx=C.vx+.05);
if(C.x > D.x,C.vx=C.vx-.05);
C.vx=C.vx+random(0.02);
最初の行で、バネが左に傾いたならば、アザラシはバネが落ちないように前進します。2行目では、反対向きに同じことをします。最後に、わずかな動きをランダムにアザラシに与えます。これで、アニメーションがより現実的に見えます。
時々、特定の時間に
CindyScript を実行させることが役に立ちます。そのため、
CindyScriptt の内部では時間についての異なる2つの概念が存在します。
simulationtime()
関数は、シミュレーションの内部時計と同期します。シミュレーションのあらゆる時刻変化はこの値を増加させます。これに対して、実時間に同期する時計を参照することができます。のためには
CindyScript の
time()
関数と
seconds()
関数が使えます。この概念の詳細については、
特殊演算子の
Time の節を参照してください。