LoginSignup
1
4

More than 3 years have passed since last update.

物理シミュレーションのための考え方[初心者向け]

Last updated at Posted at 2018-10-27

はじめに

ここでは、物理シミュレーションの例を紹介します。

プログラミング初心者で何かやってみたいと考えている方などは読んでみると面白いかもしれません。

もう少し複雑なもののシミュレーションも掲載してみましたので、よかったらこっちも見てみてください。
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

実際にグラフとしてみてみるとしっかり放物線となりました。

1
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4