在 Unity3D 中击中来袭导弹(简单的射弹导弹)

Posted

技术标签:

【中文标题】在 Unity3D 中击中来袭导弹(简单的射弹导弹)【英文标题】:Hit incoming missile (simple projectile missile) in Unity3D 【发布时间】:2013-05-14 03:11:27 【问题描述】:

我想在 unity3D 中制作地对空导弹系统,它可以预测时间 't' 后的来袭导弹位置,并在 3D 坐标中设置其拦截导弹的角度和位置,以便它可以击中来袭导弹。我正在使用以下函数来预测来袭导弹。

    void UpdateTrajectory(Vector3 initialPosition, Vector3 initialVelocity, Vector3 gravity)

    int numSteps = 500; 
    float timeDelta = 1.0f / initialVelocity.magnitude; 

    LineRenderer lineRenderer = GetComponent<LineRenderer>();
    lineRenderer.SetVertexCount(numSteps);

    Vector3 position = initialPosition;
    Vector3 velocity = initialVelocity;
    for (int i = 0; i < numSteps; ++i)
    
        lineRenderer.SetPosition(i, position);


        position += velocity * timeDelta + 0.5f * gravity * timeDelta * timeDelta;
        velocity += gravity * timeDelta;
    

我正在使用线渲染器来获得视觉轨迹显示。 现在我只能在几个位置击中导弹,这意味着我:P 必须手动调整。我的 SAM 导弹系统正确设置了它的角度,但它无法设置准确的时间和速度,因此它可以击中导弹。

【问题讨论】:

【参考方案1】:

你需要一些专业的东西:指数曲线拟合。

http://mathworld.wolfram.com/LeastSquaresFittingExponential.html http://mste.illinois.edu/malcz/ExpFit/FIRST.html

您将所有点作为曲线并找到曲线的系数,然后推断下一个点。 您的算法似乎对整个曲线有点线性,但仅适用于最新点,这还不够。

也称为非线性回归。

在这里,另一个 stackexchange 答案:https://stats.stackexchange.com/questions/20271/exponential-curve-fitting-with-a-constant

【讨论】:

这个方法看起来很有趣,但由于性能原因我不能使用它。我想使用物理学,因为它需要很少的迭代。 你需要 O(1) ,曲线拟合对于所有数据来说就像 O(N) 但如果你只使用最新的 20-30 个点,那么对于大量点来说它就像 O(1)但是是的,这将消耗大量内存和内存带宽。也许最后5分?最多同时发射多少枚导弹? 现在我一次只测试单个导弹。稍后我会添加更多。在时间间隔(比如说 3 秒)后,我可以很容易地得到来袭导弹的预测位置。但不知道在-9.81的万有引力加速度下,以哪个角度,哪个初速度,可以击中来袭的导弹! 至少有一个维度有加速度,因此您需要推断该维度,或者您可以随机化角度,以便一小部分导弹击中目标:)

以上是关于在 Unity3D 中击中来袭导弹(简单的射弹导弹)的主要内容,如果未能解决你的问题,请参考以下文章

1112.拦截导弹(简单的动态规划)

贪心4--拦截导弹

C语言 拦截导弹

题目1112:拦截导弹 最长递增子序列(LIS)

运动学导弹拦截计算方法matlab源码

九度OJ-1112-导弹拦截-最长不增子序列