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

重心と軌跡の表示/非表示は右のボタンで調整→

 バネでつながれた2つの物体の運動を表しています。物体はマウスや指(タッチパネルの場合)で動かすことができます。物体の重心、および重心の軌跡を表示(表示・非表示は↑のボタンで変更できる)するので、いろんな動きをさせてみて、重心がどのような運動をするかを見てください。

 二物体の質量比も、下のスライダーで変化させることができます。

質量比=1


 ここでは、通常のバネ(Spring)を拡張(extends)して、重心を表示するバネ(SpringWithCOM)を作っている。その部分が

	 class SpringWithCOM extends Spring {
	   constructor(gs,m1,m2,k,d,c) {
		 super(gs,m1,m2,k,d,c);
		 this.enableTrace();
		 this.traceOFF();
		 this.comDrawFlg =true;
	  }
	  drawAndTrace() {
		 this.pos=this.m1.pos.prod(this.m1.mass).sum(this.m2.pos.prod(this.m2.mass)).quot(this.m1.mass+this.m2.mass); // 重心を計算して位置(pos)に格納
		 super.drawAndTrace();
		 if( this.comDrawFlg ) {
		   this.ps.fillCircle(this.pos.x,this.pos.y,0.15,"rgba(100,100,100,0.3)");
		 }
	   };

である。constructorの部分は、SpringWithCOMが作られたときに呼ばれる。その中のsuper(gs,m1,m2,k,d,c);は、super(これは今の場合、Springのこと)を作るときに呼ばれる関数を呼ぶ。

superの意味ここでの「super」は「元になるもの」という意味合いで、「Springを元にしてSpringWithCOMを作る」ということを行っているので、Springがsuperなのである。

 SpringWithCOMはSpringの一種である。だから「作ったときにやるべき処理」もほぼ共通なので「super(すなわちSpring)を作るときにやったことをまずやって、その後で独自の部分をつけくわえている。独自の部分は、軌跡の表示をできるようにしておくことと、新しいフラグ(comDrawFlg)を作っておくことだけである。

 SpringWithCOMとSpringの重要な違いは「重心を描くこと」なので、SpringWithCOMを「描く」ときは「まずSpringを描いて、その後で重心を描く」ということをする。だから、「描く」関数であるdrawAndTrace()の最初の方でsuper.drawAndTrace();(←これはSpringのdrawAndTrace()を呼べ、ということ)があって、まず普通にSpring(バネ)を描く。その後でSpringWithCOM特有の作業(comDrawFlgがtrueなら重心を描く)をする。


目次に戻る