前回の等速直線運動に続き、等加速度運動を考えてみる。要は物体の落下とかに当たるもの。これは次のように表される。
前回と同じく、微少時間刻みで考えると、
となるので、これを計算してみた。コードにすると次のようになる。
- #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 vc; // 現ステップの速度
- double vp; // 1ステップ前の速度
- double a = 0.02; // 加速度
- int totalStep = 100000; // 総ステップ数
- double x[200]; // 座標保存用配列
- ofstream outf("./output.txt"); // 出力ファイル
- int count = 0;
- x[0] = xp = xo;
- vp = 0.1; // 初速
- for(int i = 1; i < totalStep; i++){
- vc = vp + a * dt;
- xc = xp + (vc + vp) * dt / 2;
- count++;
- if(count == 500){
- count = 0;
- x[i/500] = xc;
- }
- xp = xc;
- vp = vc;
- }
- for(int i = 0; i < 200; i++){
- outf << x[i] << endl;
- }
- return EXIT_SUCCESS;
- }
この結果を先ほどと同じく動画にすると、次のようになる。
前回と今回を組み合わせると、放物運動も表現できるはず。
コメント