衝突シミュレーターによる物理現象の可視化
衝突シミュレーターは、1次元の直線トラックまたは2次元の平面上における2つのボールの弾性・非弾性衝突をシミュレートする無料のオンラインツールです。質量、位置、速度、そして反発係数を設定することで、運動量や運動エネルギーが衝突によってどのように変化するかを視覚的かつ定量的に観察できます。
シミュレーションの実行中、画面上の「2つのボールの運動と衝突、およびそれぞれの速度ベクトルと重心を示すアニメーションアリーナ」には、ボールの動きとともに速度ベクトルを示す矢印と全体の重心が表示されます。ボール同士が衝突した瞬間、ツールは自動的に「衝突の前後比較」のデータテーブルを生成し、各ボールの速度、運動量、運動エネルギー、および全体の合計値の変化を即座に算出します。
衝突の設定と操作方法
シミュレーションを開始するには、以下のパラメータを「衝突の設定」エリアで指定します。
- 次元: 「1次元トラック」または「2次元平面」から選択します。
- シナリオ: プリセットとして「等質量・正面衝突」、「重い物体と軽い物体の衝突」、「追突」、「完全非弾性衝突」、「2次元斜め衝突」が用意されています。
- 反発係数 e: 「完全非弾性」(最小値)から「完全弾性」(最大値)までスライダーで調整できます。
- ボールの物理特性: 「ボール 1」および「ボール 2」について、以下の数値を入力します。
- 質量: 0より大きく1000 kg以下の正の数値。
- 位置 x および 位置 y(2次元のみ): 座標値。
- 速度 x および 速度 y(2次元のみ): ±50 m/sの範囲内の数値。
一時停止中には、「一時停止中にボールをドラッグして位置を調整すると、その新しい配置からシミュレーションが再スタートします。」というルールに従い、アリーナ内のボールを直接ドラッグして配置を変更できます。再生速度は「標準」または「スロー」から選択可能で、操作ボタンとして「再生」、「一時停止」、「コマ送り」、「リセット」が備わっています。
リアルタイム出力とデータ比較
シミュレーターの画面には、現在の状態を示す「現在のステータス」と、衝突前後の変化を示す「衝突の前後比較」の2つのテーブルが表示されます。
現在のステータス
シミュレーションの進行状況に合わせて、以下のリアルタイムデータが更新されます。
- 速度
- 運動量
- 運動エネルギー
- 全運動量
- 全運動エネルギー
また、シミュレーションの状態に応じて以下のステータスメッセージが表示されます。
- 「質量と速度を設定し、再生ボタンを押してください。」
- 「シミュレーションを実行中。」
- 「t =
‹t›秒で一時停止中。」
衝突の前後比較
ボールが衝突すると、テーブルに「衝突 ‹n›(t = ‹t› 秒)」が記録され、「衝突前」、「衝突後」、「変化量」の各列に以下の項目が自動的に算出されます。
- 各ボールの速度、運動量、運動エネルギー
- 「衝突で失われた運動エネルギー:
‹value›J(衝突前の全エネルギーの‹percent›)」の表示
なお、衝突が発生していない初期状態では、「再生ボタンを押してください。ボールが衝突した瞬間に、この比較表が自動的に埋まります。」と表示されます。
動作制限とエラーメッセージ
シミュレーターを正しく動作させるため、以下の物理的制限と入力規則が設けられています。
- 質量の制限: 質量は0より大きく、1000 kg以下でなければなりません。
- 0以下の入力時: 「ボール
‹n›: 質量は0より大きい値を指定してください。」 - 1000 kg超の入力時: 「ボール
‹n›: 1000 kgを超える質量は、このデモの範囲外です。」
- 0以下の入力時: 「ボール
- 速度の制限: 各速度成分は±50 m/sの範囲内に収める必要があります。
- 範囲外の入力時: 「ボール
‹n›: 各速度成分は±50 m/sの範囲内に収めてください。」
- 範囲外の入力時: 「ボール
- 配置の制限: ボールはアリーナの壁の内部に配置する必要があります。
- 壁外への配置時: 「ボール
‹n›がアリーナの外に配置されています。壁の内側に戻してください。」 - 開始時の重複時: 「開始時点で2つのボールが重なっています。実行する前に位置を離してください。」
- 壁外への配置時: 「ボール
- 数値エラー: 入力値が不正な場合、「ボール
‹n›、‹field›: 「‹token›」は数値ではありません。」と表示されます。
使用されている公式
シミュレーターは、以下の物理公式に基づいて計算を行っています。
運動量と運動エネルギー
p = m · v KE = 1 / 2 · m · |v|²
中心連結線上の衝突
2つのボールの中心を結ぶ単位ベクトルを n̂、相対速度を v_rel = v₂ − v₁ とします。衝突による力積の大きさ j は以下の式で定義されます。 j = -(1 + e) · (v_rel · n̂) ÷ (1 / m₁ + 1 / m₂) 衝突後の速度 v₁′ および v₂′ は以下のように決定されます。 v₁′ = v₁ - (j / m₁) · n̂ v₂′ = v₂ + (j / m₂) · n̂ ここで、反発係数 e は以下の関係を満たします。 e = -(v_rel′ · n̂) ÷ (v_rel · n̂)
正面弾性衝突の特例(e = 1)
v₁′ = ((m₁ - m₂) · v₁ + 2 · m₂ · v₂) ÷ (m₁ + m₂)
正面完全非弾性衝突の特例(e = 0)
一体となったときの共通速度 v′ は以下の通りです。 v′ = (m₁ · v₁ + m₂ · v₂) ÷ (m₁ + m₂)
衝突間の運動
衝突と衝突の間は、次の式に従って位置が更新されます。 x ← x + v · Δ t 「衝突の間は外力が働かないため、位置は正確に進行します。各衝突はフレーム内の正確な接触の瞬間に解決されるため、速いボールが互いをすり抜けることはありません。また、壁はボールの速度を変えずに反射します。」という仕様に基づき、近似ではなく正確な位置計算が行われます。
プライバシーと処理について
本ツールにおけるシミュレーション処理は、すべて利用者のWebブラウザ上でローカルに実行されます。「シミュレーションはすべてこのブラウザ内で実行され、設定した内容が外部に送信されることはありません。」という仕様に基づき、入力データやシミュレーション設定が外部のサーバーにアップロードされることはありません。
よくある質問(FAQ)
運動エネルギーが保存されない場合でも、なぜ運動量は保存されるのですか?
衝突の際、2つのボールは互いに等しく反対向きの力を及ぼし合うため、一方が失った運動量はもう一方が獲得します。したがって、eの値にかかわらず、全運動量が変化することはありません。一方で、運動エネルギーにはそのような保存則はありません。非弾性衝突では、エネルギーの一部が変形、熱、音へと変換されます。衝突前後の比較表はこの現象を正確に示しており、運動量の行は値が維持されるのに対し、エネルギーの行は値が減少します。
反発係数は実際に何を制御しているのですか?
反発係数とは、2つのボールの中心を結ぶ線上で測定した、接近する速度に対する離れていく速度の比率です。e = 1 では、跳ね返りによって接近時の速度が完全に維持され、運動エネルギーが保存されます。e = 0 では、ボールは互いに全く離れなくなり、正面衝突の場合は1つの塊となって進みます。その中間の値ではエネルギーの一部が失われます。例えば、バスケットボールは約 e ≈ 0.6、コンクリート上のテニスボールは約 0.75 で跳ね返ります。
2次元の完全非弾性衝突で、ボールが一体化してくっつかないのはなぜですか?
e = 0 は、ボールが実際に押し合う方向である、中心を結ぶ線上での離れていく速度をゼロにします。正面衝突ではこれが運動のすべてであるため、2つのボールは一体となって進みます。しかし、斜め衝突(かすり衝突)では、各ボールは接触面に沿った横方向の運動も持っており、摩擦のない滑らかなボールにはそれを打ち消す摩擦力が働かないため、跳ね返り自体がなくなっても軌道は分かれます。完全に付着させるには摩擦や噛み合わせが必要ですが、このモデルでは意図的にそれらを排除しています。
これは実際の衝突にどのくらい近いのですか?
保存則自体は厳密なものであり、事故調査官や素粒子物理学者もこれに依拠しています。ここで理想化されているのはそれ以外の要素です。現実の物体は瞬時ではなく数ミリ秒かけて変形し、中心から外れて衝突すると回転し、互いに摩擦し合い、転がって停止します。このシミュレーションの数値は、クリーンな実験が近づく教科書的な極限値として扱い、特定の現実の物体に対する予測値としては扱わないでください。