●は右のボタンで加速・減速ができる。

 まずは↑のボタンで加速・減速して遊んでみよう。



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

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

 最初の3行は「系を作り、壁と重力を加える」という作業である。

 このプログラムには三つの物体がある。

 一つ目の物体はMである。M=new NonDynamicalObject(gs,0,0,"rgba(0,100,100,0.5)");で、「動かない物体(NondDynamicalObject)を作り、系gsの場所(0,0)に置いている。色をrgba(0,100,100,0.5)にした。次の行のM.r=0.1;で、半径を0.1にしている。

 二つ目の物体はm1であり、m1=new DynamicalObject(gs,-2,0,0,Math.sqrt(0.5),1,"rgba(255,0,0,0.5)");で、系gsの場所(-2,0)に(最初は)置かれる。

 初速度は(0,Math.sqrt(0.5))にしている。その後の1は質量が1であることを指定し、最後で色をrgba(255,0,0,0.5)にした。

 最後の物体が大事で、バネである。

bane=new Bane(gs,M,m1,1,0,"rgba(0,100,0,0.5)");が新しいバネを作る(Baneというオブジェクトの定義は、bane.jsにある)。

 Baneの第1の引数は例によって所属する系だが、第2,第3の引数は「そのバネが何と何をつないでいるか」を示す。今の場合はM,m1なので、固定点Mと動く物体m1がバネで繋がれているのである。

 第4、第5の引数はバネ定数と自然長である(ここでは1と0に設定した)。最後の引数は例によって色である。

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

			<button onClick="m1.v.mul(1.1);">10%加速</button>
			<button onClick="m1.v.mul(0.9);">10%減速</button>

がその部分で、これによりボタンを作る。 onClick="m1.v.mul(1.1);"が「ボタンがクリックされたらこの動作を行え」という部分で、今はm1.v(つまりm1の速度)を1.1倍(または0.9倍)にするという動作を行わせている。

<button>と</button>の間にある文字列(10%加速)は、ボタンに表示される文字列である。

課題

  1. 物体や固定点の初期位置を変えてみよう。
  2. 初速度を変えてみよう。
  3. 物体の半径を変えてみよう。
  4. 物体の質量を変えてみよう(運動はどう変わる?)。
  5. 物体の色を変えてみよう。
  6. 重力を消してみよう。
  7. 力を表示させてみよう。
  8. バネ定数を変えてみよう。
  9. バネの自然長を変えてみよう。
  10. バネ定数を非常に強くして(100とか)、最初から自然長の長さにしておくと、バネがほとんど伸び縮みしないので「棒」のようにふるまう(つまり、普通の振り子になる)。やってみよう。
  11. 【ちょっと難しい】物体を2個にして、二重振り子にしてみよう。
  12. 【ちょっと難しい】物体を複数個、固定点を2個にして、連成振動を起こさせてみよう。
  13. その他思いついたことはなんでもやってみて。