以下は、衝突現象のシミュレーションである。

  

左の球の速度:   右の球の速度:

相対速度比:

 二つの球を考えているが、その二つの球の間に働く力(interactionForce)を

Ball.prototype.interactionForce=function (to) {
	   var r=to.npos.diff(this.npos);
	   var rlen=r.length();
	   if (rlen > 2*this.r) {
		 return new Vector(0,0);
	   } else {
		 return r.prod(10000*(2*this.r-rlen)*(2*this.r-rlen));
	   }
	 };

のように定義して作っている(離れていると何も力が働かず、近づくと反発力)。

 衝突によりはね返り係数がどうなるかを調べるようになっている。

 コードの中にある、ps.report=で始まる部分が、psのreport()というプロパティ(関数)を書きなおしていて、この部分で現在の二つの球の速度と、その相対速度の比(初速度に比べて)を出すようになっている。

 相対速度の比は要ははね返り係数である。今、エネルギーが保存するような計算になっているはずだから、1になるはず(実際にやってみると、有効数字3桁程度の範囲で1になっている)。

 こんなふうに何度も繰り返すシミュレーションでは、(いちいちソースを書き換えるのはたいへんだし)ボタンを使って命令したり、スライダを使って数値を変更したりできると楽である(↑でも、そうしている)。その方法について以下で述べる。

ボタンの作り方と使い方

 htmlの中(ボタンを置きたい部分)に<button onclick="restart();">やり直し</button>と書いておくと「やり直し」と書かれたボタンがブラウザ上に現れる。押すと、onclickのところに書かれた関数が実行される(この場合、restart())。restartという関数の中身はソースを見よう。

スライダの作り方と使い方

 スライダを使う場合はhtmlの最初の方でvarslider.jsを読み込んでおくこと。

 スライダはプログラムで生成させている。生成するためのコードは

var a=new VarSlider("v0",0.1,5,1,0.1,function(x) { nextv0=x;},"初速度");

という部分(VarSliderというクラスがvarslider.jsの中で定義されている)。引数の意味はvarslider.jsの方を見て欲しいが、大事な点はこのスライダの中身が変更されるとfunction(x) { nextv0=x;}の部分が実行されるということ。そのときxにはスライダーにセットされた値が入っている。この場合、nextv0という変数の値をスライダの示す値に変更しているのである。