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

VisualC++ と OpenGL を利用した仮想物理実験室
【1-1-1】物理量について

「コンピュータ・シミュレーション講座」の案内 でも触れましたが、自然科学とは、「いつでも」「どこでも」「誰でも」同じ条件であれば必ず起きる、もしくは起こすことができる(客観的・普遍的)自然現象を対象に、その因果関係(自然法則)を理解して組み立てることを目的とした学問体系です。その中で物理学とは、自然界における様々な現象と、それを構成する物質の振る舞いとの因果関係(特に物理法則と呼ばれる)を理解することを目的とします。物理学ではその因果関係を「数学」という言語で記述します。

物理学は、物理量という客観的に測定可能な量を定義し、複数の物理量間の因果関係(=物理法則)を導きます。

物理量1「時刻」「位置」(1次元の場合)

物理学で最初に出てくる物理量です。「[]」の中は単位を記述します。物理量同士の因果関係を理解するときに、この単位が非常に重要な意味を持ちます。今後、具体的に説明してきます。上記は1次元の場合ですが、3次元に拡張します。

物理量1「位置」(3次元の場合):位置ベクトル

r」は位置という物理量を表すベクトル(位置ベクトル)です。 物理量の表し方には、「大きさ」のみを持つ量を「スカラー量」と、「大きさ」と「方向」の両方を持つ「ベクトル量」とがあり(ほかにもテンソル量がある)、前述の「物理量1」の時刻「t」はスカラー量、位置「r」はベクトル量です。高校数学で学習するベクトル量は頭に矢印で表現しますが、大学以降では太字(+斜体)で表します。

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

仮想物理実験室の構築 (ver1.2)」をベースにプログラミングしますので、仮想実験室を構築しておいてください。1つのボールが3次元空間に静止していることを例に、シミュレーションします(といっても静止してますが)。

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

C言語の「構造体」を利用して、ボールの位置を記述します。

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

// ボールの定義
struct BALL { //構造体の定義
  double x;
  double y;
  double z;
};
BALL ball1 = { //変数の宣言+初期値の設定
  0.0, //x
  0.0, //y
  20.0 //z 
};

「x」「y」「z」をメンバに持つ「BALL」という構造体を定義し、 「BALL」型の変数「ball1」を宣言と同時に初期値を設定しています。

ボールの描画

「Culculate()」と「DrawStructure()」の定義を以下のように書き換えます。

//--------------------------------------------------------
// 計算と物体の描画
//--------------------------------------------------------
void Culculate(){
  t = dt * double(tn);
  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」は、構造体「BALL」の変数「ball1」のメンバを呼び出しています。

実行結果

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