Wie finde ich den Startwinkel eines Projektils?

9

Ich mache ein 2D-Spiel, in dem Einheiten Pfeile aufeinander schießen. Ich kenne die Position des Schützen und des Ziels sowie die Anfangsgeschwindigkeit des Projektils. Ich möchte wissen, welchen Winkel das Projektil haben sollte, um auf dem Ziel zu landen. Das Ziel könnte sich auf einer anderen Höhe als der Schütze befinden.

Zusammenfassend kenne ich v0, R und g und muss den Winkel (oder die Höhe?) Finden.

Ich habe http://en.wikipedia.org/wiki/Projectile_motion gelesen , aber ich kann nichts finden, was mit dem zusammenhängt, was ich brauche.

korn3l
quelle
Es kommt darauf an, ob Sie sich an eine realistische ballistische Kurve halten wollen oder ob eine Parabel gut genug ist.
AB.
Möchten Sie Wind einbeziehen? Oder irgendeine andere horizontale Beschleunigung? (Es macht die Mathematik natürlich schwieriger)
Seth Battin
Ich möchte eine realistische Projektilbewegung erreichen und es ist kein Wind beteiligt.
korn3l

Antworten:

11

Die Formel zum Ermitteln des Winkels lautet

Formel

Dabei ist v die anfängliche Startgeschwindigkeit, g die Schwerkraftkonstante, x und y die Entfernung und Höhe des Ziels.

Die beiden Wurzeln dieser Gleichung geben Ihnen zwei mögliche Winkel. Wenn die Ergebnisse imaginär sind, ist Ihre Anfangsgeschwindigkeit nicht groß genug, um das Ziel zu erreichen (wenn Sie den Erreichungswinkel berechnen möchten, lesen Sie dies ). Es liegt an Ihnen, welcher Winkel ausgewählt wird. Es wäre sinnvoll, den direktesten Weg zu wählen, dh den kleineren Winkel.

Unten sehen Sie ein GIF dieser Gleichung mit unterschiedlichen Zielwerten und einer konstanten Startgeschwindigkeit.

Formel als animiertes GIF grafisch dargestellt

Ressourcen aus diesem Wikipedia- Artikel

Stephen Tierney
quelle
Beachten Sie, dass es in den meisten Fällen zwei gültige Lösungen gibt. Angenommen, es wird kein Luftwiderstand oder eine ähnliche maximale Reichweite erreicht, wenn das Projektil in einem Winkel von 45 Grad abgefeuert wird. Immer höher oder niedriger wird die Reichweite senken - also , wenn Sie jeden bisschen Pep von Ihrer Waffe benötigt , da sowohl eine höhere und eine niedrigere Lösung.
Loren Pechtel
Sie würden wahrscheinlich den Winkel nehmen, der die kürzeste Flugzeit hat, was normalerweise ein kleinerer Winkel ist (wahrscheinlich immer, aber ich erlaube mir die Möglichkeit, mich anmutig zu irren, heh). Es ist schneller, vor Ihren Füßen auf den Boden zu schießen, indem Sie nach unten zielen, als wenn Sie in einem wirklich steilen Winkel nach oben zielen.
Azaral
@ StephenTierney Danke für die Antwort. Das habe ich gesucht.
korn3l
Fand eine viel einfachere Lösung für dieses Problem, Informationen von en.wikipedia.org/wiki/…
Stephen Tierney
2

Anfang dieses Jahres habe ich einen einfachen Top-Down-Shooter erstellt. Ich habe die folgende Methode verwendet:

Frühere Antwort: /programming/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;
    }
}

Es berechnet eine Flugbahn zwischen zwei Positionen.

Deukalion
quelle