2017-09-05 18 views
2

私は高低に見えましたが、私は何もしていないようです。弾丸軌跡のx座標とy座標を計算し、Chart.jsにプロットする必要があります。弾丸軌跡のx座標とy座標を計算する - Chart.js

(0、5)から発射された弾丸が(250,5)でターゲットに当る。問題はその間の軌道上に正しくグラフを描くことにある(xはヤード、yはフィート)。

私は目標を打つことなく弾丸と弾丸の弾道の軌道をうまく計算できますが、弾丸がx距離で弾に当たるように発射角を計算することはできません。

これは私が私の計算を得ているところ主に次のとおりです。https://en.wikipedia.org/wiki/Trajectory_of_a_projectile

マイアプリは次のようになります。

My apps graph

ここで私がこれまで持っているものです。

calcTrajectory() { 

// get target distance - passed in 

// get launch angle to hit target at that distance 
let x = this.distance; 
let y = this.height; 
let g = 10.733; // gravity in yds 
let v = this.velocity/3; // velocity in yds 
let angle = Math.atan(
    Math.pow(v, 2) + Math.sqrt(
    Math.pow(v, 4) - g * ((g * x * x) + (2 * y * v * v) 
    )) 
/
    (g * x) 
); 

// graph x y coords based on target distance, launch angle, and bullet drop 
for (let i = 0; i < 10; i++) { 
    let time = (i * 100)/v; 
    let bulletY: number = Math.sin(angle - (Math.PI/2)) * v; 
    let dropVal = ((10.733/2) * Math.pow(time, 2)) * 3; 

    console.log('Bullet Y:', bulletY); 

    this.myChart.data.datasets.forEach((dataset) => { 
    dataset.data.push({ 
     x: (i * 100), 
     y: parseInt(this.height) + bulletY - dropVal 
    }); 
    }); 

    // update chart 
    this.myChart.update(); 
} 

何私は行方不明ですか?

編集:質問を明確にし、私は角/活字体のもののすべてを削除する必要がありましたが、あなたは以下のコードを実行し、グラフプログラムに出力を貼り付けて、それを検証することができるはず絵

答えて

1

を追加しました。私がやっていることは、距離入力を移動するのに必要な角度を計算してから、最初の速度のxとyベクトルを計算することです。その後、タイムステップでそれらを掛けるだけで、プロットできるポイントを得ることができます。より細かい点が必要な場合は、ステップ変数を増やすだけです。

const calcTrajectory = (distance, height, velocity)=> { 
 

 
    // get target distance - passed in 
 

 
    // get launch angle to hit target at that distance 
 
    let x = distance; 
 
    let y = height; 
 
    let g = 10.733; // gravity in yds 
 
    let v = velocity/3; // velocity in yds 
 
    let angle = Math.asin((x*g)/(v*v)); 
 
    let step = 100; 
 
    let xVelocity = v * Math.cos(angle); 
 
    let yVelocity = v * Math.sin(angle) 
 
    // graph x y coords based on target distance, launch angle, and bullet drop 
 

 
    let data = {x:[], y:[]} 
 
    for (let i = 0; i < 100; i++) { 
 
    let time = (i/step); 
 
    data.x.push(time*xVelocity) 
 
    data.y.push(time* yVelocity) 
 
    yVelocity -= (g/step) 
 
    } 
 
console.log(data); 
 
} 
 

 
calcTrajectory(250, 0, 2024.43)

関連する問題