JavaScript is not available.

           

Copyright © 2016-2018 MediaKobo Co., Ltd. All rights reserved.
JavaScript コンソール       ホーム       目次

砲弾の軌道計算

 シミュレーションプログラムの基礎として、砲弾の軌道計算を紹介します。

砲弾の軌道計算

 速度が変化しない場合、速度に時間を掛ければ距離が求まります。 しかし、重力が働く場合など、速度が変化する場合は、そうはいきません。

その場合、ある短い時間幅を考え、その間は速度は変化しないと考えて計算する方法があります。
短い時間幅で移動する距離は、短い時間幅とその時の速度を掛けて求めます。
速度の変化分は、短い時間幅と速度の変化分(加速度)を掛けて求めます。
この様に、短い時間幅で少しづつ計算しながら進めていき、解を求めていく方法が数値計算です。
また、砲弾の軌道を計算する場合に、空気抵抗を考慮すると、速度の変化分(加速度)は、速度に比例して変化します。

以上の点をまとめると、短い時間で変化する移動距離、速度、および、空気抵抗を考慮した加速度は以下の様になります。


   移動距離 = 短い時間幅 * 速度
   速度変化 = 短い時間幅 * 加速度
   加速度   = 重力加速度 - 空気抵抗係数 * 速度

尚、以下のプログラムで、th は打ち上げ角度、v0 は初速、k は空気抵抗係数を表します。

var canvas = document.getElementById('jsccanvas');
var context = canvas.getContext('2d');

function point(x, y) {
  x = x / 4;
  y = 400 - y / 2;
  context.strokeStyle = 'rgb(0, 0, 0)';
  context.fillStyle = 'rgb(255, 255, 0)';
  context.beginPath();
  context.arc(x, y, 3, 0, 2*Math.PI, true);
  context.fill();
}

var th = 30;
var v0 = 300;
var k  = 0.1;

var px = 0;
var py = 0;
var vx = v0 * Math.cos(th / 180 * Math.PI);
var vy = v0 * Math.sin(th / 180 * Math.PI);
var ax =   0;
var ay = -10;
var dt = 0.1;
var i  = 0;

for(i = 0; i < 10000; ++ i) {
  px += dt * vx;
  py += dt * vy;
  vx += dt * ax;
  vy += dt * ay;
  ax =   0 - k * vx;
  ay = -10 - k * vy;
  if(py < 0) break;
//  console.log(px + ", " + py + ", " + vx + ", " + vy);
  point(px, py);
}

目次へ