力学の最初と言えば、等速直線運動。力が加わっていない質点は静止するか、等速直線運動をするというやつの等速直線運動。ある時間の質点の位置は初期位置に速度×時間を加えることで求められる。
この式から任意の時間における質点の位置を求めることができる。
今回はあえて、微少時間刻みで質点の移動を計算してみた。つまり、を初期位置とし、
を速度、
を微少時間すると、開始からdt時間後の位置は
となる。これから、任意の
に対して、
と表現できる。これを使って順番に計算していこうということ。
コードにするとこんな感じになる。
- #include <fstream>
- #include <cstdlib>
- using namespace std;
- int main(int argc, char* argv[])
- {
- double dt = 0.0001; // 1ステップの微少時間
- double xo = 0.0; // 初期座標
- double xc; // 現ステップの座標
- double xp; // 1ステップ前の座標
- double v = 0.01; // 速度
- int totalStep = 100000; // 総ステップ数
- double x[200]; // 座標保存用配列
- ofstream outf("./output.txt"); //結果出力ファイル
- int count = 0;
- x[0] = xp = xo;
- for(int i = 1; i < totalStep; i++){
- xc = xp + v * dt;
- count++;
- if(count == 500){
- count = 0;
- x[i/500] = xc;
- }
- xp = xc;
- }
- for(int i = 0; i < 200; i++){
- outf << x[i] << endl;
- }
- return EXIT_SUCCESS;
- }
単位系をMKSとすると、原点からスタートして、速度1cm/sで等速直線運動する質点の位置を、微少時間0.0001秒ごとに10秒間ぶん計算していることになる。そして出力は500回に1回なので、0.05秒ごとの位置をファイルに記録している。
ちなみに、この結果をアニメーションにしたものが「OpenGlのアニメーションを動画ファイルにしてみた」の記事になる。ちょっと円の半径は大きくしすぎたと思う。
コメント