Làm thế nào tôi có thể tìm thấy góc phóng của một viên đạn?


9

Tôi đang thực hiện một trò chơi 2d trong đó các đơn vị bắn mũi tên vào nhau. Tôi biết vị trí của kẻ bắn và mục tiêu và vận tốc ban đầu của đạn. Tôi muốn biết góc độ của viên đạn cần có để hạ cánh trên mục tiêu. Mục tiêu có thể ở một độ cao khác với người bắn.

Để tổng hợp tôi biết v0, R và g và tôi cần tìm góc (hoặc chiều cao?).

Tôi đọc http://en.wikipedia.org/wiki/Projectile_motion , nhưng tôi không thể tìm thấy thứ gì đó liên quan đến những gì tôi cần.


Nó phụ thuộc nếu bạn muốn bám vào đường cong đạn đạo thực tế hoặc là một parabola đủ tốt.
AB.

Bạn có muốn bao gồm gió? Hoặc bất kỳ gia tốc ngang khác? (Tất nhiên, nó làm cho môn toán khó hơn)
Seth Battin


Tôi muốn đạt được một chuyển động đạn thực tế và không có gió liên quan.
korn3l

Câu trả lời:


11

Công thức để tìm góc là

Công thức

Trong đó v là tốc độ phóng ban đầu, g là hằng số trọng lực, x và y là khoảng cách và chiều cao của mục tiêu.

Hai gốc của phương trình này cung cấp cho bạn hai góc có thể. Nếu kết quả là tưởng tượng thì vận tốc ban đầu của bạn không đủ lớn để đạt được mục tiêu (nếu bạn muốn tính góc tiếp cận hãy đọc điều này ). Tùy thuộc vào góc độ nào được chọn. Sẽ có ý nghĩa khi chọn con đường trực tiếp nhất tức là góc nhỏ hơn.

Bạn có thể thấy một GIF của phương trình này bên dưới với các giá trị mục tiêu khác nhau và tốc độ khởi động không đổi.

Công thức biểu đồ dưới dạng GIF hoạt hình

Tài nguyên từ bài viết trên wikipedia này


Lưu ý rằng trong hầu hết các trường hợp có hai giải pháp hợp lệ. Giả sử không có lực cản hoặc phạm vi tối đa tương tự đạt được khi đạn được bắn ở góc 45 độ. Lên cao hơn HOẶC thấp hơn sẽ hạ thấp phạm vi - do đó trừ khi bạn cần mỗi chút oomph từ súng của mình, sẽ có cả giải pháp cao hơn và thấp hơn.
Loren Pechtel

Bạn có thể sẽ có góc có thời gian bay ngắn nhất, thường là góc nhỏ hơn (có thể luôn luôn nhưng tôi cho phép bản thân có khả năng bị sai một cách duyên dáng heh). Bắn nhanh hơn xuống đất trước chân bạn bằng cách nhắm xuống hơn là nhắm vào một góc rất dốc.
Azaral

@StephenTierney Cảm ơn bạn đã trả lời. Đây là những gì tôi đang tìm kiếm.
korn3l

Tìm thấy một giải pháp đơn giản hơn nhiều cho vấn đề này, thông tin từ en.wikipedia.org/wiki/ Kẻ
Stephen Tierney

2

Đầu năm nay tôi đã tạo ra một game bắn súng từ trên xuống đơn giản. Tôi đã sử dụng phương pháp sau:

Câu trả lời trước: /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;
    }
}

Nó tính toán một quỹ đạo giữa hai vị trí.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.