ボールの衝突運動シミュレーション 1999/02/25(初版)


| 目次 | 1ページ | 2ページ | 3ページ | 4ページ | 5ページ |



 このホームページで公開している グラフィックス・クラスライブラリ GLIBW32 
に添付してあるサンプルソースにある key6.cpp はカラーボールの衝突運動のアニ 
メーション・プログラムです。ソースのコメントにあるようにボールの衝突の扱い 
は手抜き計算です(まったく非現実的なボール)。 
サンプルファイルは実装関数の機能確認のためのもので、できるだけ小さいプログ 
ラムにしたいためにそのようにしました。 

 ところが、きちんとプログラムを書いてみると、なかなかおもしろいボールの振 
る舞いを見ることができます。 

 ここで取り扱うのは、四角形の領域内に幾つかの自由なボールを走らせ、壁やボ 
ール同士の衝突を考えます。衝突はすべて完全弾性衝突とします。つまり無重力空 
間内でのボールの理想的な衝突現象を(まじめに)考えます。 

 以下では予備知識として高校の1,2年で習う程度の物理の基本的な概念と、平 
面の代数・幾何の計算知識を仮定します。正確に理解するためには、紙と鉛筆を使 
って実際に図形を描いて計算してみることをお薦めします(少し面倒ですが内容は 
シンプルです)。 

 3つのステップで話を進めます。まず、現象についての物理的概念を整理し、次 
にそれを純粋な平面幾何の問題に焼き直します。最後はプログラムの実装で、ボー 
ルの運動についてのクラスの設計を行います。 


衝突現象  まずは、ボールが壁にぶつかる場合を考えましょう。衝突が完全弾性衝突だと下 図のようにボールは跳ね返ります。
ボールと壁の衝突 完全弾性衝突では、衝突の前後でボールの持つエネルギーは変化しません。従って、 跳ね返る速さVは衝突前と同じです。速度ベクトルを壁に対して水平方向と垂直方 向とに分けて考えると、水平成分は変化しなくて、垂直成分は反転します。従って、 図の中の黒丸で示すように入射角度と反射角度が等しくなります。この図のような 衝突では、角度θ(横軸のx軸から測る)でボールが角度0(ゼロ)の壁に衝突す ると、跳ね返るボールの角度は、       2×0−θ=−θ, となります。いろんな場合の図形を描いてみると分かりますが、一般に、角度φの 壁に対してボールが角度θでぶつかると、      2φ−θ, の角度で跳ね返ります。  次に、ボール同士の衝突を考えます。今度は、壁とは違って衝突し合う2つのボ ールの動きを同時に追っかけなければならないので、複雑なように見えます。  しかし、すぐ後で分かるように、2つのボールの間の衝突にはとても簡単で見通 しを良くする性質があります。 [注]   煩いことをいうと、上の表現は正しくありません。完全弾性衝突とは、壁に 垂直な方向の速度成分の比(反発係数)が1ということであって、水平成分とは 無関係なものです。衝突の前後で、速度の水平成分がどのように変化するかは、 ボールと壁の接触がなめらかである(滑る)か粗である(擦る)かといった性質 によって決まるものです。粗であれば、衝突で擦りあってエネルギーを失います。 ここでは、接触がなめらかであることを暗黙に前提しています。

目次へ 次の頁へ

Copyright(c) 1999  Yamada,K