Как найти начальную скорость и угол, необходимые для попадания в координату и на определенную высоту?

Проблема

Для игрового движка, который я пишу, мне нужна функция, которая возвращает начальную скорость и угол запуска снаряда, чтобы пораженный объект достиг заданной максимальной высоты и оказался в указанной координате. Мир 2D сбоку, ради расчетов.

Итак, известно следующее:

  • Начиная с Х
  • Начиная с Y
  • Цель X
  • Цель Y
  • Требуемая максимальная высота
  • Сила тяжести

И мне нужно рассчитать следующее:

  • Начальная скорость
  • Угол запуска

(Или начальная скорость по X и начальная скорость по Y.)

Мое исследование

Я искал формулу, которая дала бы мне это, но не нашел. Поэтому я решил вывести его самостоятельно, с моими ограниченными навыками математических уравнений.

Страница Википедии, посвященная движению снарядов, была моим главным ресурсом. Для нескольких приведенных там формул я могу преобразовать их, но только для того, чтобы возвращать угол запуска, когда известна скорость , или возвращать скорость, когда угол запуска известен (среди других известных переменных). Я не могу точно понять, как получить формулу, которая вернет мне два неизвестных, или как исказить существующие формулы, чтобы удовлетворить эти потребности.

Я попытался взять формулу для максимального расстояния снаряда с этой страницы и формулу максимальной высоты, также с той же страницы , и передать их в Wolfram Alpha , попросив его решить меня для скорости и угла. Вывод кажется мне ерундой и даже ссылается на новую переменную n. Не говоря уже о том, что этот ответ также не позволит мне использовать высоту цели, и когда я попытался подключить формулу из Википедии, которая это сделала, Wolfram Alpha даже не понял мой ввод. Поэтому я отказался от этой идеи.

Ни один подход не будет даже учитывать предполагаемое требование максимальной высоты. В конце концов, среди множества поисков я наткнулся на этот ответ , и мне удалось его реализовать. Я мог бы использовать эту промежуточную координату как X = (цель X + начальная X) / 2, а Y = требуемая максимальная высота. Это работает отлично, но только если целевая Y совпадает с начальной Y... Это видно в GIF поста, когда промежуточная точка находится на половине расстояния по горизонтали, но целевая точка и начальная точка имеют разную высоту - - траектория проходит выше промежуточной точки.

Это выглядит как мой лучший выбор, но я понятия не имею, как воспользоваться этим подходом и заставить высоту достичь намеченного уровня. Если я попытаюсь изменить компонент Y начальной скорости на значение, заданное формулой максимальной высоты: ( 2 г у ) , что нарушит весь расчет и заставит снаряд не попасть в цель (опять же, когда начальная высота отличается от высоты цели).

(Примечание: я знаю, что некоторые траектории могут быть невозможными — я могу справиться с этими случаями и намеренно заставить снаряд не долететь до цели.)

Заключение

Этот код необходим, чтобы позволить игрокам бросать объекты так, чтобы они приземлялись точно туда, куда целится игрок, но каждый объект имеет максимальную высоту, которую он может достичь, что вынуждает игрока использовать правильные объекты для работы.

Потратив несколько дней на это, я совершенно не понимаю, как решить эту проблему. Возможна ли вообще такая формула или ее математически невозможно определить?

Я подозреваю, что разработка игр лучше подходит для этого запроса.

Ответы (1)

Вы можете решить эту проблему с помощью стандартных формул, применимых к движению снаряда. Зная, что вертикальная скорость равна нулю наверху, вы можете использовать вертикальное расстояние, чтобы найти время наверху и начальную вертикальную скорость. Точно так же расстояние обратного спуска определяет время опускания. Общее время горизонтального расстояния дает горизонтальную скорость.