如何找到弹丸的发射角度?


9

我正在制作一个2D游戏,其中各单位互相射箭。我知道射手和目标的位置以及弹丸的初始速度。我想知道弹丸落在目标上的角度。目标的高度可能与射手的高度不同。

综上所述,我知道v0,R和g,我需要找到角度(或高度?)。

我阅读了http://en.wikipedia.org/wiki/Projectile_motion,但是找不到与我需要的东西相关的东西。


这取决于您是否要坚持逼真的弹道曲线或抛物线是否足够好。
AB。

你想包括风吗?还是其他水平加速度?(当然,这会使数学变得更加困难)
塞斯·巴丁


我想实现逼真的弹丸运动,并且没有风。
korn3l

Answers:


11

找到角度的公式是

式

其中v是初始发射速度,g是重力常数,x和y是目标的距离和高度。

该方程的两个根为您提供两个可能的角度。如果结果是虚构的,则您的初始速度还不够大,无法达到目标(如果要计算到达角,请阅读此内容)。由您决定选择哪个角度。选择最直接的路径(即较小的角度)是有意义的。

您可以在下面看到此方程的GIF,其中具有不同的目标值和恒定的发射速度。

公式显示为GIF动画

维基百科文章的资源


请注意,在大多数情况下,有两种有效的解决方案。假设当弹丸以45度角发射时没有阻力或类似的最大射程。调高调低将减小射程-因此,除非您需要从枪中获得一点点动感,否则解决方案将既高又低。
罗伦·佩希特尔

您可能会选择飞行时间最短的角度,通常是较小的角度(可能总是这样,但我允许自己优美地打错了可能性,呵呵)。向下瞄准比在非常陡峭的角度向上瞄准要快得多。
Azaral

@StephenTierney谢谢您的回答。这就是我想要的。
korn3l

找到了一个更简单的解决方案,来自en.wikipedia.org/wiki/…的
Tierney

2

今年早些时候,我创建了一个简单的自上而下的射击游戏。我使用以下方法:

较早的答案:https : //stackoverflow.com/questions/15364852/move-sprite-diagonally/15365570#15365570

public static class Helper_Direction
{

    // Rotates one object to face another object (or position)
    public static double FaceObject(Vector2 position, Vector2 target)
    {
        return (Math.Atan2(position.Y - target.Y, position.X - target.X) * (180 / Math.PI));
    }

    // Creates a Vector2 to use when moving object from position to a target, with a given speed
    public static Vector2 MoveTowards(Vector2 position, Vector2 target, float speed)
    {
        double direction = (float)(Math.Atan2(target.Y - position.Y, target.X - position.X) * 180 / Math.PI);

        Vector2 move = new Vector2(0, 0);

        move.X = (float)Math.Cos(direction * Math.PI/180) * speed;
        move.Y = (float)Math.Sin(direction * Math.PI / 180) * speed;

        return move;
    }
}

它计算两个位置之间的轨迹。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.