3D目标弹道轨迹的主导公式

时间:2012-01-23 03:57:05

标签: math 3d

我想知道是否有一个目标领先的公式用于带有弹道轨迹的3d目标领先,如果不是我想知道是否有可能将2d目标领先公式转换为3d目标领先公式通过对齐它是沿目标运动的平面吗?

1 个答案:

答案 0 :(得分:2)

在射弹发射时可以很容易地计算出目标的领先位置,但是无法保证目标在射弹空中时不会改变路线,加速或减速。在任何情况下,当你引导目标时,你可以假设目标的速度保持不变,或者如果它正在加速,它的加速度将保持不变。

这里是blog post我写的关于预测一段时间内的行进距离,考虑加速度。这是我使用的代码。

这将计算在给定恒定加速度的情况下随时间移动的距离。在这种情况下,constantAccel是一个速度,如果您的目标没有加速,那么您只需使用0.0f作为该参数。

float CalcDistanceOverTime(const float initVelocity, 
                           const float constantAccel,
                           const float timeDelta)
{
    return  (initVelocity * timeDelta)
          + (0.5f * constantAccel * (timeDelta * timeDelta);
}

以下是一个例子:

Vector3 targetsVelocity(3.0f, 0.0f, 3.0f);
float targetsAcceleration = 1.0f;

float distanceTraveled = CalcDistanceOverTime(targetsVelocity, targetsAcceleration, timeDelta)

Vector3 finalPosition = targetsVelocity * distanceTraveled;

您可能会注意到,您需要timeDelta来传递此公式。这意味着,根据您的射弹的轨迹和速度,您需要知道到达目标需要多长时间,但是由于您没有这样做,这会变得更加困难。确切地知道可能需要多长时间,直到你知道它将会是什么。我不确定这个的确切公式,但我相信你可以根据你的射弹的速度和速度,以及目标的速度和速度来计算微积分,并考虑到两者的重力,你应该能够找到这两个可以碰撞的空间点。

如果上述方法不可行,那么你可以选择一个固定的timeDelta,如果你可以保证你的射弹能够达到你想要的任何角度和速度。例如,选择3秒作为你的timeDelta,你知道目标在3秒内的位置,然后立即发射你知道将在3秒内到达太空中的那个点的射弹。

以防万一,这里有关于计算3D中弹道轨迹的blog post。使用此方法计算目标时间应该很简单,基于输出垂直速度和位置,只需使用重力计算该位置到达目标位置高程的秒数。