ドミノ連鎖シミュレーター 戻る
機械力学

ドミノ連鎖シミュレーター

2D剛体物理エンジンでドミノの連鎖反応を再現。クリックで配置した牌を押し倒し、角運動量の伝播とエネルギー変換をリアルタイムで観察しよう。

ドミノ連鎖シミュレーター

クリックでドミノを配置し連鎖反応を観察

操作

キャンバスをクリックしてドミノを追加

ドミノ間隔
間隔
px
ドミノの高さ
高さ
px
重力加速度
g
m/s²
計算結果
0
総数
0
倒れた数
0.0
運動エネルギー
0.0s
経過時間
50
間隔 (px)
60
高さ (px)
10.0
重力 (m/s²)
領域

🁣 ドミノを配置してください

キャンバスをクリックしてドミノを追加
または「自動配置」ボタンで一列に並べます

理論・主要公式

$$I\ddot{\theta} = \tau_g - \tau_d$$

慣性モーメント $I = \frac{mh^2}{3}$(底辺回転)、重力トルク $\tau_g = mg\frac{h}{2}\sin\theta$、減衰トルク $\tau_d = c\dot{\theta}$。$m$: 質量、$h$: 牌高さ、$\theta$: 傾斜角。

$$\Delta L = F_\text{imp} \cdot r_{\perp} \cdot \Delta t$$

衝突時の角運動量移動。$F_\text{imp}$: 衝撃力、$r_{\perp}$: 接触点の垂直距離、$\Delta t$: 衝突時間。

$$v_\text{tip} = h\dot{\theta}$$

牌先端速度。倒れる速度が大きいほど次の牌に伝わる運動量が増加し、連鎖が加速する。

ドミノ連鎖シミュレーターとは

🙋
ドミノって、なんで倒れると次々に倒れていくんですか?ただの棒が倒れて当たるだけなのに。
🎓
大まかに言うと、倒れるドミノの「回転エネルギー」が、隣のドミノに「角運動量」としてバトンタッチされるからだよ。上のシミュレーターで「間隔」を非常に広げてみて。倒れても次の牌に当たらなくなるでしょ?これが「伝達」の第一条件だ。
🙋
なるほど!じゃあ「高さ」のスライダーを変えると何が変わるんですか?
🎓
良いところに気づいたね。高さが変わると、倒れる勢いが大きく変わるんだ。実は、背が高いドミノほど重心が高いから、倒れる時に持つ位置エネルギーが大きくなる。その分、倒れる速度が速くなって、隣に与える衝撃力 $F_{imp}$ も強くなるんだ。試しに高さを最大と最小で比べてみて、連鎖の速さがどう変わるか確認してみよう。
🙋
え、じゃあ重力「g」を変えたらもっと変わるんですか?宇宙ステーションみたいにgを0にしたらどうなるの?
🎓
その通り!gは倒れる原動力である重力トルク $\tau_g$ を決めるんだ。gを小さくすると、倒れるのがゆっくりになって、連鎖が途中で止まってしまうかもしれない。逆に大きくしすぎると、バタンと倒れすぎて跳ね返ったりする。シミュレーターでgを動かして、連鎖が成立するぎりぎりの条件を探してみるのも面白いよ。

よくある質問

現時点では固定ですが、牌の高さや厚みを変えると倒れる速度や連鎖の伝わり方が変わります。将来的なアップデートでパラメータ調整機能を追加予定です。
牌の高さ(重心位置)と慣性モーメント、重力加速度、そして衝突時の角運動量移動量で決まります。高い牌ほどゆっくり倒れ、隣への衝撃も大きくなります。
牌同士の間隔が広すぎる、または倒れる速度が不足している可能性があります。牌を密に配置するか、最初の牌をより強く押す(クリックを長押し)ことで連鎖が持続しやすくなります。
空気抵抗や摩擦を簡略化しているため、現実より連鎖がスムーズに進む傾向があります。ただし、角運動量保存とエネルギー損失の基本メカニズムは正確に再現しています。

実世界での応用

エンターテインメントとアート:大規模なドミノアートやイベントでは、曲線配置や特殊トリガーを設計する必要があります。物理シミュレーションを使うことで、数千個に及ぶ牌の配置計画を効率的に立て、確実な連鎖を保証できます。

連鎖反応の教育モデル:核分裂の連鎖反応や、ソーシャルネットワークでの情報拡散など、抽象的な「連鎖」概念を、直感的に理解するための物理的アナロジーとして活用されます。エネルギー伝播の視覚化に最適です。

機械的スイッチ/トリガーの設計:微小な力で大きな機構を動かす「てこ」の原理や、一つのトリガーで順次スイッチが入る機械システムの基礎検討に、ドミノ連鎖の物理モデルが参考にされます。

剛体物理エンジンの検証:ゲームやCAEソフトウェアに使われる物理エンジンでは、多数の剛体が連続して衝突・回転する現象(ドミノ連鎖)は、計算の安定性やエネルギー保存則が正しいかどうかをテストする代表的なベンチマーク課題として使われています。

よくある誤解と注意点

まず、「間隔を狭めれば狭めるほど連鎖が速くなる」と思いがちですが、実は最適な間隔があります。例えば、牌の高さに対して間隔が極端に狭い(例えば高さの10%以下)と、倒れてくる牌が隣の牌の上部にぶつかり、押し倒すというより「押し込む」形になってしまいます。これだと有効なトルク($r_{\perp}$が小さくなる)を伝えられず、かえって連鎖が遅くなったり、止まったりします。目安としては、牌の高さの20〜30%の間隔が、最も効率的に角運動量を伝達できることが多いです。

次に、シミュレーション上で「摩擦係数」を0に設定しても、現実ではあり得ません。 机との摩擦が完全にゼロだと、牌が倒れる際に軸が滑ってしまい、綺麗な回転運動になりません。このツールでは机との摩擦は無限大(滑らない)と仮定しているので、純粋な回転運動だけを観察できます。実物で再現する時は、滑り止めシートなどでこの条件に近づける必要がある、というのが落とし穴です。

最後に、「重力gを大きくすれば無限に速くなる」というわけではない点。確かに倒れる角加速度はgに比例しますが、衝突の瞬間も無視できません。gを大きくしすぎると、倒れる速度が速すぎて、衝突時に牌が跳ね返ったり、次の牌を叩き壊すような大きな衝撃力が生じます。シミュレーション上では「破壊」をモデル化していないので、不自然な跳ね返りとして観察されることがあります。実用的な連鎖設計では、安定して伝播するgの範囲を見極めることが大切です。

使い方ガイド

  1. spacingSliderで牌間隔を1~50pxの範囲で調整し、連鎖効率を制御します
  2. heightSliderで牌の高さを20~200pxに設定し、慣性モーメント I=mh²/3 に影響させます
  3. gravSliderで重力加速度を1~15m/s²に変更し、重力トルク τ_g=mg(h/2)cosθ による倒壊速度を変えます
  4. キャンバス内をクリックして牌を配置し、最初の1枚を押し倒して角運動量伝播ΔL=F_imp・r_⊥・Δtを観察します
  5. 総数/倒れた数の比率と経過時間から、連鎖反応の完全性を評価します

具体的な計算例

高さ80px(実際には0.08m)、質量0.05kg、間隔15pxの杉材ドミノを重力9.8m/s²下で配置した場合、最初の牌に衝撃力20Nを加えると、衝撃点高さ0.04mでの角運動量はL=20×0.04×0.05≒0.04kg・m²/sとなります。この牌の慣性モーメントI=(0.05)×(0.08)²/3≒1.07×10⁻⁴kg・m²から初期角速度ω≒374rad/sが得られ、重力トルクτ_g=(0.05)×(9.8)×(0.04)×cos(30°)≒0.017N・mにより減速しながら隣の牌に衝突します。間隔を15pxに最適化すると、100個中98個が3.2秒以内に倒れる連鎖率が実現します。

実務での注意点