ボールの弾みをシミュレーションする
ボールの弾み(跳ね返り)をシミュレーションする
ボールを高いところから落とすと、徐々に加速しながら落ちていきます。そして地面に当たると跳ね返ります。
跳ね返ると、今度は上昇していきますが、徐々に減速して、あるタイミングで上昇を止め(上向きだった速度が0になる)、そこから下降に転じます。また下向きに加速しながら落ちていきます。
以後、下降・着地して跳ね返り・上昇、また下降…を繰り返しますが、無限に繰り返すわけではありません。跳ね返るごとに、到達できる最高地点が下がっていき、最後には全く跳ね返らなくなります。
地面に着地して、跳ね返るときの跳ね返りの強さによって、一連の運動の様子は変わります。
「跳ね返りの強さ」(※アプリでは、反発係数と呼んでいます)を指定できるプログラムを使って、運動の様子を見てみましょう。
サンプルアプリの動作
このアプリでは、同時に3つのボールを落として、動作を確認することができます。3つのボールそれぞれに、反発係数を「0以上1以下」の範囲で指定できます。
3つの反発係数を決めた後、「シミュレーション開始」ボタンをクリックすると、シミュレーションが始まります。
「画面上が地面の上側で、画面下に地面がある」という想定です。ボールは画面左上から、右に向かって投げられたかのように動きます。
後からボールの動きを追跡・確認できるように、円の動きの軌跡を線で示します。
このアプリは、全てのボールが3回弾んだ後、4回目に地面に当たったところで停止します。
さまざまに反発係数を変更して、運動の様子を見てみましょう。
アプリとソースコードのインポート
以下のボタンをクリックすると、Monaca Educationにプロジェクトをインポートできます。
Monaca Educationにインポートする(要ログイン)
このプログラムは、JavaScriptのライブラリp5.jsを使って作成しました。p5.jsは、Processingというプログラミング言語・環境の特徴をJavaScriptに持ち込んだものです。今回の作例のように、プログラミングをして、アニメーションを作ることができます。
計算の誤差
今回紹介したアプリで、跳ね返りの強さを1にすると、どうなるでしょうか。
本来なら、ボールを離した元の高さ(初めの高さ)まで戻り、無限に繰り返します。
しかし、このサンプルプログラムでは、最高地点が変動する様子が観察できます。これは、ボールの位置やボールの移動速度(落下・上昇の速度)を計算するときに、小数を含む演算を繰り返し行っていて、誤差が生じるためです。
厳密なシミュレーションを行う場合には、コンピュータによる計算ならではの誤差を防ぐために工夫が必要になります。