文責:遠藤理平
公開日:2017年03月07日
最終更新日:2017年03月07日
本項は「physics.js」を用いて物理シミュレーションを行うための手順をチュートリアル形式で紹介する記事です。 最新版「physics.js」(リビジョン14、2017年03月03日現在)をここからダウンロードしてください。以下はチュートリアルの目次です。
前項「球体を運動させてみよう!」では、指定した速度で等速直線運動させる方法を解説しました。本項では地上に存在する物体に均一に加わる重力を球体に加える方法について解説します。図1は重力が加えられた球体に初速度を斜め上に与えて運動させた結果です。放物運動と呼ばれます。また、運動の軌跡は放物線とも呼ばれます。
「physics.js」では、登場する3次元オブジェクトへ与える力は全て仮想物理実験室オブジェクト(PhysLabクラス)のsetInteractionメソッドで追加します。第一引数と第ニ引数に相互作用の対象となる3次元オブジェクト、第三引数に相互作用の種類、第四引数にパラメータを指定します。次のプログラムソースでは球オブジェクトに重力を与えています。 重力のように相互作用のペアが存在しない場合には、第一引数に仮想物理実験室オブジェクトを、第二引数に重力の対象となる球体オブジェクトを与えます。第三引数には3次元オブジェクトに時間・空間に依存しない一定の力を与えることを意味するステート定数「PHYSICS.ConstantForce」を、第四引数に重力(=重力加速度×質量)を与えます。 この一定の力は下向き(-z軸方向)の重力に限らず任意の方向と大きさを与えることができ、また3次元オブジェクトごとに異なる値を与えることもできます。
//////////////////////////////////////////////////////////////////// // 球オブジェクトの準備 //////////////////////////////////////////////////////////////////// PHYSICS.physLab.ball = new PHYSICS.Sphere({ (省略) velocity: { x: 7, y: 0, z: 12 }, //速度ベクトル (省略) }); //球オブジェクトを登場 PHYSICS.physLab.objects.push( PHYSICS.physLab.ball ); //////////////////////////////////////////////////////////////////// // オブジェクト同士の接続 //////////////////////////////////////////////////////////////////// //重力の設定 PHYSICS.physLab.setInteraction( PHYSICS.physLab, PHYSICS.physLab.ball, PHYSICS.ConstantForce, { force : new THREE.Vector3( 0, 0, -10 ).multiplyScalar( PHYSICS.physLab.ball.mass ) } ); //仮想物理実験室のスタートメソッドの実行 PHYSICS.physLab.startLab();
「physics.js」では現在次の5つの相互作用が定義されています。今後順番に解説していきます。
■ 一定力(PHYSICS.ConstantForce)
■ 空気抵抗力(PHYSICS.AirResistanceForce)
■ 剛体同士の衝突(PHYSICS.SolidCollision)
■ 線形ばねによる結合(LinearSpringConnection)
■ 2点間距離固定拘束(PHYSICS.FixedDistanceConnection)
また、次の4つも現在導入を準備しています。
■ 剛体棒による結合(PHYSICS.SolidConnection)
■ クーロン相互作用(PHYSICS.CoulombInteraction)
■ 万有引力相互作用(PHYSICS.UniversalGravitation)
■ レナード・ジョーンズポテンシャル(PHYSICS.LennardJonesPotential)
「ニュートンの運動方程式」は物理学のはなし1で紹介した「慣性の法則」が成り立つ系において、 「物体の加速度()は、物体に加えた力()に比例し、質量()に比例する」という法則で、次のように方程式で表されます。
この方程式により、物体に加わった力が与えられたときの加速度を計算することができるので、加速度から速度、速度から位置を計算することができるため、物体の運動を計算することができるのです。 「physics.js」でもこの方程式を数値的に計算して計算結果を3次元グラフィックスで表現しています。