矢印の表示/非表示は右のボタンで調整→


 このプログラムの主要部分は以下の通り。

				psystem=new Phystem("canvas1",10,10,0.6);
				psystem.makeEdge(0.3);
				psystem.makeGravity(1);
				M=new NonDynamicalObject(psystem,0,0,"rgba(0,100,100,0.5)");
				M.r=0.1;
				m1=new DynamicalObject(psystem,-2,0,0,Math.sqrt(0.5),1,"rgba(255,0,0,0.5)");
				m1.r=0.3;
				m1.enableDrag();
				bane=new Spring(psystem,M,m1,0.5,1,"rgba(0,100,0,0.5)");
				psystem.start();	

 新しいものとして、NonDynamicalObjectというクラスが登場した。

「クラス」って?何かをプログラムで動かすとき「同じルールで動くもの」は最初にまとめて一回だけプログラムして、後で「その同じルールで動くもの」を作るときにはそれを再利用できるようになっていると楽である。その「最初にまとめて一回だけプログラム」を行って、「以後はこれを型にして作れ」という状況になっているものが「クラス」。たとえば「DynamicalObject(動く物体)」というクラスは、前もって「動く物体」が持っているべき属性(質量やら色やら半径やら)と機能(時間が経過すると動く)がプログラムされている。

 前のページでも「Phystem(系とその描画キャンバス)」や「DynamicalObject(動く物体)」「Ball(ボール)」などが登場していた。ここで「NonDynamicalObject(動かない物体)」というクラスが新しく登場したわけである。

 M=new NonDynamicalObject(psystem,0,0,"rgba(0,100,100,0.5)");で新しい「動かない物体」が作られている。最初のpsystemは所属する系。次の0,0は位置である。NonDynamicalObjectは動かないので初速度はいらない。最後のが色である。これで、場所(0,0)に動かない点が作られる。次の行のM.r=0.1;でMの半径を0.1にしている。

 もうひとつ、新しいクラスはSpringが登場した。bane=new Spring(psystem,M,m1,0.5,1,"rgba(0,100,0,0.5)");で作られている。第1の引数はやはり属する系である。第2、第3の引数をバネがつないでいる2つの物体で、この新しいバネが「Mとm1を結ぶバネ」であることを示す。続く第4の引数はバネ定数(バネの強さを示す数字)が0.5であることを、第5の引数は自然長(力がはたらいていないときのバネの長さ)が1であることを示す。最後の引数は色である。


 このファイルではボタンを2個用意して、ボタンを押すと物体の運動が変わるようにしてある。

  <button onClick="psystem.drawFFlg = !psystem.drawFFlg;">力を表示On/Off</button>
  <button onClick="psystem.drawVFlg = !psystem.drawVFlg;">速度表示On/Off</button>
	

がその部分で、<button> 名前</button>で「名前」というラベルのついたボタンを作る。このボタンはOnClickという属性を持っていて、 onClick="psystem.drawFFlg = !psystem.drawFFlg;"が「ボタンがクリックされたらこの動作を行え」という部分である。

演算子!の意味!flg はflgがtrueならfalseに、falseならtrueになる。ここでは!psystem.drawFFlgをpsystem.drawFFlgに代入しているから、psystem.drawFFlgの真偽(true←→false)をひっくり返すという意味になる。

 バネではなく棒でつないでみるのが、振り子である。

目次に戻る