HOME > natural science Laboratory > コンピュータ・シミュレーション講座 > 仮想物理実験室

VisualC++ と OpenGL を利用した仮想物理実験室
【2-1-3】重力による自由落下運動のシミュレーション

文責:遠藤 理平 (2010年8月29日) カテゴリ:仮想物理実験室(325)

VisualC++ + OpenGL プログラミング

等加速度直線運動と同様に「【0日目】仮想物理実験室の構築 (ver1.0)」をベースにプログラミングします。 上記で解説した逐次計算を行うアルゴリズムをプログラミングします。

仮想物理実験室変数の定義

//--------------------------------------------------------
// 仮想物理実験室変数の定義
//--------------------------------------------------------
double t = 0.0;  //時刻
double dt= 0.01; //時間刻み
int tn = 0;      //ステップ数
double g = 9.80665; //重力加速度 g

// ボールの定義
struct BALL {
  double x, y, z;
  double vx, vy, vz;
  double ax, ay, az;
};
BALL ball1 = { //初期設定
   0.0, 0.0, 120.0, //(x, y, z)
   0.0, 0.0, 0.0,   //(vx,vy,vz)
   0.0, 0.0, g      //(ax,ay,az)
};

ボールの位置「x,y,z」、速度「vx,vy,vz」、加速度「ax,ay,az」を構造体「BALL」のメンバとして、 「BALL」型の変数「ball1」を宣言と同時に初期値を設定しています。

ボールの描画

//--------------------------------------------------------
// 計算と物体の描画
//--------------------------------------------------------
void Culculate(){
  t = dt * double(tn);
  //速度の算出
  ball1.vx = ball1.vx + ball1.ax * dt;
  ball1.vy = ball1.vy + ball1.ay * dt;
  ball1.vz = ball1.vz + ball1.az * dt;
  //位置の算出
  ball1.x = ball1.x + ball1.vx * dt;
  ball1.y = ball1.y + ball1.vy * dt;
  ball1.z = ball1.z + ball1.vz * dt;
  tn++;
}
void DrawStructure(){
  glPushMatrix();
    glMaterialfv(GL_FRONT, GL_AMBIENT, ms_ruby.ambient);
    glMaterialfv(GL_FRONT, GL_DIFFUSE, ms_ruby.diffuse);
    glMaterialfv(GL_FRONT, GL_SPECULAR, ms_ruby.specular);
    glMaterialfv(GL_FRONT, GL_SHININESS, &ms_ruby.shininess);
    glTranslated(ball1.x, ball1.y, ball1.z); //平行移動値の設定
    glutSolidSphere(4.0, 20, 20);            //引数:(半径, Z軸まわりの分割数, Z軸に沿った分割数)
  glPopMatrix();
}

位置「ball1.x」「ball1.y」「ball1.z」
速度「ball1.vx」「ball1.vy」「ball1.vz」
加速度「ball1.ax」「ball1.ay」「ball1.az」
を逐次計算します。 等加速度直線運動 なので、加速度の変化はありません。

自由落下のシミュレーション

z = 120[m] の場所からの自由落下をシミュレーションします。 シミュレーションの結果、t=0[s]でスタートして、t=5[s]で地面に到着しました。

VisualC++ と OpenGL を利用した仮想物理実験室

第0章 仮想物理実験室の構築

第1章 様々な運動

第2章 ニュートンの運動方程式

第3章 剛体の運動(エネルギー保存則と運動量保存則)

付録

  • 【A-1】参考文献
    ・(A-1-1)OpenGL について
    ・(A-1-2)VisualC++ について
    ・(A-1-3)物理シミュレーション
    ・(A-1-4)数値計算

未分類

力学

量子力学

波動論



▲このページのトップNPO法人 natural science トップ

関連記事

仮想物理実験室







▲このページのトップNPO法人 natural science トップ




Warning: mysqli_connect(): (28000/1045): Access denied for user 'xsvx1015071_ri'@'sv102.xserver.jp' (using password: YES) in /home/xsvx1015071/include/natural-science/include_counter-d.php on line 8
MySQL DBとの接続に失敗しました