HOME > natural science Laboratory > コンピュータ・シミュレーション講座 > 仮想物理実験室

「physics.js」による仮想物理実験室
「ニュートンのゆりかご」のつくり方

文責:遠藤 理平 (2017年3月22日) カテゴリ:仮想物理実験室(277)

 本項では、物理シミュレーション環境構築用HTML5フレームワーク「physics.js」を用いて制作した「ニュートンのゆりかご」のシミュレーション方法を解説します。ニュートンのゆりかごとは、運動量保存則力学的エネルギー保存則の可視化用の実験装置として考案されました。 図1はニュートンのゆりかごの実行結果です。運動するひとつの球体が球体列に衝突すると、一番反対側の球体が衝突時と同じ速度で打ち出されます。

(図1)ニュートンのゆりかごの例

ニュートンのゆりかごの例
実際の仮想物理実験室はこちら

「ニュートンのゆりかご」のつくり方

 「ニュートンのゆりかご」は、支柱となる箱と球体間に2点間距離固定拘束力を定義、球体同士に衝突相互作用を定義、すべての球体に重力を定義します。 球体を並べる際に初期状態として接触(2球間の距離がそれぞれの半径の和に等しい)している場合には衝突計算時の連立方程式が解けないため、わずかばかり離して配置しています。

【プログラムソース1】3次元オブジェクトの例(NewtonsCradle.html)
////////////////////////////////////////////////////////////////////
PHYSICS.physLab.balls = [];
PHYSICS.physLab.boxes = [];
for( var i = 0; i<6; i++ ){
	//球オブジェクトの準備
	PHYSICS.physLab.ball[ i ] = new PHYSICS.Sphere({
		(省略)
		//初期位置
		position: { x: -3+i*1.0001, y: 0, z: 2 },
		(省略)
	 });
	//球オブジェクトを登場
	PHYSICS.physLab.objects.push( PHYSICS.physLab.balls[ i ] );
	//箱オブジェクトの準備
	PHYSICS.physLab.boxes[ i ] = new PHYSICS.Box({ ~ 省略 ~ });
	//箱オブジェクトを登場
	PHYSICS.physLab.objects.push( PHYSICS.physLab.boxes[ i ] );
}
//初速度の設定
PHYSICS.physLab.balls[ 0 ].velocity.set( -10, 0, 0 );
////////////////////////////////////////////////////////////////////
//相互作用の準備
////////////////////////////////////////////////////////////////////
//球体同士の2点間距離固定拘束力
for( var i = 0; i<6; i++ ){
	//2点間距離固定拘束力の定義
	PHYSICS.physLab.setInteraction(
		PHYSICS.physLab.balls[ i ],
		PHYSICS.physLab.boxes[ i ],
		PHYSICS.FixedDistanceConnection,
		{
			radius :0.02
		}
	);
	//重力の設定
	(省略)
);
//衝突力相互作用の定義
for( var i=0; i<6; i++ ){
	for( var j=i+1; j<6; j++ ){
		//衝突力の定義
		PHYSICS.physLab.setInteraction(
			PHYSICS.physLab.balls[ i ],
			PHYSICS.physLab.balls[ j ],
			PHYSICS.SolidCollision, //衝突力の定義
			{
				Er : 1.0,     //並進反発係数
			}
		);
	}
}
//仮想物理実験室のスタートメソッドの実行
PHYSICS.physLab.startLab();


▲このページのトップNPO法人 natural science トップ

関連記事

仮想物理実験室







▲このページのトップNPO法人 natural science トップ