はじめに
ここでは、物理シミュレーションの例を紹介します。
プログラミング初心者で何かやってみたいと考えている方などは読んでみると面白いかもしれません。
もう少し複雑なもののシミュレーションも掲載してみましたので、よかったらこっちも見てみてください。
https://qiita.com/ysuzuki19/items/c1be78d9e9e90dd4aa1e
プログラムの作成と実行をした環境
Ubuntu18.04LTS
物理シミュレーションのための準備
物理シミュレーションとは
現実世界の状況を想定してその動作や振る舞いを数値計算によって再現すること
シミュレートする物理現象
ここでは、高校の教科書でも初歩的な現象である「自由落下」を例とします。
対象とする現象について考える
物理シミュレーションをするためには、まずシミュレーションする対象の条件を確認する必要があります。自由落下の条件とは、以下のようなものです。
・加速度g=9.8
・初期速度v0=0.0
また、対象にあてはまる式なども必要となってきます。自由落下では以下となっています。
v = v_0 + gt
x = v_0t + (gt^2)/2
物理シミュレーション
プログラム作成
以上のように条件などが整理できたらあとはプログラムを作成するのみです。ここで、変数x
の方向は下向きの軸としています。
free_fall.c
# include <stdio.h>
// 重力加速度の設定
constexpr double G = 9.8;
// 速度の初期値の設定
constexpr double V0 = 0.0;
// 時間の刻み幅の設定
constexpr double TIME_STEP = 1.0;
// 計測する時間の設定
constexpr double TIME_MAX = 10.0;
int main(){
// 経過時間を表す変数
double time;
// 速度を表す変数(初期値を代入しておく)
double v = V0;
// 位置を表す変数
double x = 0;
for (time = 0; time <= TIME_MAX; time += TIME_STEP){
v += G * TIME_STEP;
x = V0*time + G*time*time/2.0;
printf("%f, %f\n", time, x);
}
return 0;
}
実行結果
上のプログラムをコンパイル・実行したところ、以下のようになりました。
0.000000, 0.000000
1.000000, 4.900000
2.000000, 19.600000
3.000000, 44.100000
4.000000, 78.400000
5.000000, 122.500000
6.000000, 176.400000
7.000000, 240.100000
8.000000, 313.600000
9.000000, 396.900000
実際にグラフとしてみてみるとしっかり放物線となりました。