발사체의 발사 각도를 어떻게 찾을 수 있습니까?


9

유닛이 서로 화살을 발사하는 2D 게임을 만들고 있습니다. 나는 사수와 목표 위치와 발사체의 초기 속도를 알고 있습니다. 발사체가 목표물에 도달하기 위해 가져야하는 각도를 알고 싶습니다. 대상은 사수와 다른 높이에있을 수 있습니다.

요약하면 v0, R 및 g를 알고 각도 (또는 높이?)를 찾아야합니다.

http://en.wikipedia.org/wiki/Projectile_motion을 읽었 지만 필요한 것과 관련된 것을 찾을 수 없습니다.


그것은 당신이 현실적인 탄도 곡선을 고수하고 있는지 아니면 포물선인지에 달려 있습니다.
AB.

바람을 포함 하시겠습니까? 아니면 다른 수평 가속? (물론 수학을 더 어렵게 만듭니다)
Seth Battin


현실적인 발사체 움직임을 원하며 바람이 없습니다.
korn3l

답변:


11

각도를 구하는 공식은

공식

여기서 v는 초기 발사 속도, g는 중력 상수, x와 y는 대상의 거리와 높이입니다.

이 방정식의 두 근은 두 가지 가능한 각도를 제공합니다. 결과가 상상력이 없다면 초기 속도가 목표에 도달하기에 충분하지 않습니다 (도달 각도를 계산하려면 이것을 읽으십시오 ). 어느 각도를 선택했는지는 귀하에게 달려 있습니다. 가장 직접적인 경로, 즉 더 작은 각도를 선택하는 것이 합리적입니다.

다른 목표 값과 일정한 발사 속도로 아래 방정식의 GIF를 볼 수 있습니다.

애니메이션 GIF로 그래프로 표시

이 위키 백과 기사의 자료


대부분의 경우 두 가지 유효한 솔루션이 있습니다. 발사체가 45도 각도로 발사 될 때 드래그 등의 최대 범위가 달성되지 않는다고 가정합니다. 더 높 거나 낮을 수록 사거리가 줄어 듭니다. 따라서 총에서 모든 비트가 필요하지 않으면 더 높은 솔루션과 더 낮은 솔루션이 있습니다.
Loren Pechtel

아마도 비행 시간이 가장 짧은 각도를 사용하는 것이 좋을 것입니다. 일반적으로 더 작은 각도입니다. 다리를지면에서 쏘는 것이 실제보다 가파른 각도로 조준하는 것보다 아래로 조준하는 것이 더 빠릅니다.
Azaral

@StephenTierney 답변 주셔서 감사합니다. 이것이 내가 찾던 것입니다.
korn3l

이 문제에 대한 훨씬 간단한 해결책을 찾았습니다. en.wikipedia.org/wiki/…
Stephen Tierney

2

올해 초 저는 간단한 하향식 슈팅 게임을 만들었습니다. 다음 방법을 사용했습니다.

이전 답변 : https : //.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;
    }
}

두 위치 사이의 궤적을 계산합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.