-1

私はすでに発射体の動きを扱うための数学を見つけましたが、私のものとの違いは、提供された方向ベクトルと時間でした.

私のコードでは、方向ベクトルは -1 から 1 で、時間は間隔時間でした。

これらのベクトルと時間を使用して、重力による新しい方向ベクトルを計算するにはどうすればよいですか?

助けてください

4

1 に答える 1

0

3D空間を想定(-Y方向に重力を向ける)

  1. 初期化

    // player / gun parameters
    const float v0 = ???;             // [m/s] gun projectile escape velocity
    float direction[3] = { ?,?,? };  // [-] your unit direction vector
    float position[3] =  { ?,?,? };  // [m] your player position + gun barrel offset
    
    // projectile parameters
    float a[3]={0,-9.81,0};   // [m/s^2] actual acceleration (just gravity in down direction)
    float v[3]=direction*v0;  // [m/s] actual velocity
    float p[3]=position;      // [m] actual position
    

    正確にしたい場合は、プレーヤーの速度ベクトルも v に追加します。発射物がロケットの場合、その方向への信頼の加速も追加します...

  2. いくつかのタイマーで更新

    const float dt = 0.001; // [s] update 'timer' period
    
    v += a*dt;
    p += v*dt;
    

    ここでは、次のようなテストを追加できます: 何かを打つ、地面を打つ、...摩擦も良い考えです...

    F=c0*|v|^2; for air
    F=c1*|v|^3; for liquid
    

    方向(-v/|v|)にあるので、これを更新の開始に追加します:

    a={0,-9.81,0}
    a-=v*c0*|v|/m; // or a-=v*c1*|v|^2/m;
    

    ここでc0,c1は摩擦定数 (try ~0.01)、mは発射体の質量 [kg]

于 2014-05-06T06:56:01.330 に答える