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

VisualC++ と OpenGL を利用した仮想物理実験室
【1-2-2】等加速度直線運動のシミュレーション

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

【1-2-1】等加速度直線運動のアルゴリズムの導出」で導いた等加速度直線運動を逐次計算するアルゴリズム(オイラー法)を用いて、コンピュータでシミュレーションするための計算アルゴリズムを構築します。 【1-1-3】等速度直線運動のシミュレーションと同様に「【0日目】仮想物理実験室の構築 (ver1.0)」をベースにプログラミングします。 上記で解説した逐次計算を行うアルゴリズムをプログラミングします。

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

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

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

【2日目】等速度直線運動との違いは、ボールの加速度を表す 「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;
  if(ball1.x > 100) ball1.x = -100;  //<------------------------からくり部分
  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」
を位置を逐次計算します。今回はすぐに画面の外にでてしまうので、xが100を超えたら、x=-100にワープ(無限ループ)するようにからくりを入れました。

計算アルゴリズムの解説

位置を逐次計算するアルゴリズム

vx = vx + ax * dt
x  = x  + vx * dt

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との接続に失敗しました