「physics.js」による仮想物理実験室:「連成振子」のつくり方
本項では、物理シミュレーション環境構築用HTML5フレームワーク「physics.js」を用いて制作した「連成振子」のシミュレーション方法を解説します。連成振子とは、振動運動する物体同士が線形ばねなどのような2点間の距離に依存する相互作用で結合されている場合に生じる協調運動です。振動する物体の質量や振動数、結合の強さに依存する固有な振動運動を起こします。図1は連成振子運動の実行結果です。初期条件として左の球体に外側向きに初速度を与えています。左球体の運動に引きずられて右球体も運動を開始しますが、右球体は1往復した後に速度と加速度ともに0となると同時に左球体の速度が最大となります。この後は、2つの球体は周期的な運動を行います。
(図1)連成振子の例
「連成振子」のつくり方
「連成振子」は、支柱となる箱と球体間に2点間距離固定拘束力を定義、球体同士に線形ばね相互作用を定義、すべての球体に重力を定義します。最後に初速度を一つの球体に与えます。
【プログラムソース1】3次元オブジェクトの準備(CoupledPendulum.html)
//////////////////////////////////////////////////////////////////// PHYSICS.physLab.balls = []; PHYSICS.physLab.boxes = []; for( var i = 0; i<2; i++ ){ //球オブジェクトの準備 PHYSICS.physLab.ball[ i ] = new PHYSICS.Sphere({ (省略) //初期位置 position: { x: -3+6*i, 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[ 1 ].velocity.set( 0, 0, 5); //////////////////////////////////////////////////////////////////// //相互作用の準備 //////////////////////////////////////////////////////////////////// //球体同士の2点間距離固定拘束力 for( var i = 0; i<2; i++ ){ //2点間距離固定拘束力の定義 PHYSICS.physLab.setInteraction( PHYSICS.physLab.balls[ i ], PHYSICS.physLab.boxes[ i ], PHYSICS.FixedDistanceConnection, { radius :0.02 } ); //重力の設定 (省略) ); //線形ばね相互作用の定義 PHYSICS.physLab.setInteraction( PHYSICS.physLab.balls[ 0 ], PHYSICS.physLab.balls[ 1 ], PHYSICS.LinearSpringConnection, { k : 0.5, //ばね弾性力 L0 : 6.0, //ばねの自然長 visible : true, //ばねの表示 color : 0x3e8987, //描画色 radius :0.15, //ばねの半径 tube :0.03, //管の半径 windingNumber : 10//ばねの巻数 } ); //仮想物理実験室のスタートメソッドの実行 PHYSICS.physLab.startLab();