Итак, если вы когда- нибудь играли в космические шутеры, то видели, что для кинетического орудия (или любого другого, чьи пули настигают цель не сразу) часто разрабатывается маркер упреждения. Я также хочу сделать этот маркер, но в 2D пространстве, используя движок Unity.
И как грамотно записать формулу в коде, чтобы на выходе мы получали координаты, куда нужно стрелять, чтобы попасть по цели (оранжевый круг на зарисовке), зная расстояние до цели, скорость цели и скорость полёта снаряда?
Возможно вопрос глупый, но раньше такого на форуме не замечал.
Допустим у нас есть:
xk0 - Начальное положение кораблика
vk - Скорость кораблика
xs0 - Начальное положение стрелка
vs - Скорость пули
Что нам неизвестно:
t - Время полета пули до столкновения с корабликом. Оно же время полета корабля до столкновения с пулей
X - точка встречи пули и кораблика через время t
Согласно формуле из динамики,
X = xk0+t*vk = xs0+t*vs (1)
- то есть конечная точка определяется начальное точкой + скорость помноженная на время движения. Из этого уравнения можно вычислить время до столкновения.
t=(xk0-xs0)/(vs-vk) (2)
Зная время до столкновения, можно вычислить координату столкновения по формуле (1).
Зная координаты столкновения и время до столкновения, остается только произвести выстрел в нужном направлении.
Известно: K(x1,y1) - точка начального положения корабля P(x2,y2) - точка начального положения пули v1, v2 - скорости корабля и пули Найти: O(x0,y0) - точка пересечения траекторий т.к. v2 и v1 известны, то известен коэффициент a=v1/v2; Время полета пули и корабля до пересечения траекторий одинаковые, скорости постоянные, соответственно берем формулу t=s/v и приравниваем по времени, получается: s1=as2; Аналогично и s2. Избавляемся от корней и помня, что у нас расстояния, то не заморачиваемся с отрицательными значениями, получаем уравнение: В уравнении два неизвестных: x0 и y0, чтобы их найти надо второе уравнение. Точка пересечения траекторий находится на прямой траектории движения корабля, общее уравнение прямой: y=kx+b. Подставив координаты точек K и O, найдем k и b для прямой KO. С полученным уравнением (а в полученное уравнение мы вместо x и y подставляем значение искомой точки: x0 и y0) и вместе с уравнением s1=as2 составим систему с двумя уравнениями и двумя неизвестными:
Решаем систему - находим x0 и y0. Т.к. одно из уравнений квадратное, то корня два, соответственно выбираем значение по ходу движения корабля.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
После обновления Unity 20172
Есть программа,которая должна выводить слово,где буквы заменены на символ '_' и пользователь по 1 букве угадывает этого словоПроблема в том,что...