Создание траектории полёта
Ещё один вопрос по геометрии, в которой я очень плох
Как создать траекторию полёта снаряда в трёхмерном пространстве, имея начальные координаты и координаты цели в формате (x; y; z)?
Моя реализация кода для полёта может двигаться только по прямой, поэтому нужны дополнительные точки полёта для красивой траектории, а значит, как я понимаю, нужно строить график функции, даже два(для x; y и z; y), которые будут объединяться в трёхмерное пространство
Примерный рисунок того, как я это понимаю:
Вопрос в том, какая должна быть функция графика чтобы это построить? Положение точек в координатной плоскости могут отличаться, например начальные точки вряд-ли будут стоят в 0 0 0, а цель может иметь отрицательную высоту и т.п.
Ответы (1 шт):
В общем виде это называется движение «тела брошенного под углом к горизонту».
На графике изображен вектор начальной скорости
V0
, в свою очередь для рассчетов он раскладывается(проецируется) на оси Х и У. Проекция V0
на ось Х - V0x
, проекция на ось У - V0y
.
Эти проекции нужны для того, чтобы разложить сложное, казалось бы, движение на два простых и решить стандартной формулой.
Формула
х=х0+V0*t+0.5*(a*t^2)
х - координата точки в результате движения
х0 - начальная координата точки
V0 - проекция начальной скорости на ось
t - время движения
a - ускорение
Собственно, заменяете иксы на любую из нужных координат(х,у,z) и все работает как надо.
Перед тем, как пользоваться формулой - определим что влияет на перемещение по осям.
Для оси Х
Тут только проекция начальной скорости на ось Х
Для оси Y
Проекция V0 на ось
Ускорение свободного падения(g=9.8м/с^2)
Из-за того, что ускорение направлено в противоположную сторону направлению оси - в расчетах используется со знаком минус
Конкретно в этом случае с использованием формулы получаем, что Х определяется:
х = 0 + V0x*t + 0.5*(0*t^2)
То есть просто x=V0x*t
У определяется так:
у = 0 + V0y*t - 0.5*(g*t^2)
Теперь к частному случаю определения начальных скоростей для попадания в точку:
x = x0 + V0x*t
y = y0 + V0yt - 0.5(g*t^2)
Попробуем из обоих уравнений выделить t
, тогда:
t = (x-x0)/V0x
(через виета или дискриминант) t1 = V0y + (V0y^2 - 2*(y-y0))^0.5
t2 = V0y - (V0y^2 - 2*(y-y0))^0.5
Два значения, т.к. может быть попадание в точку при движении вверх(до достижения максимальной высоты) и при движении вниз(после достижения максимальной высоты)
Таким образом, t2
- не очень красивый вариант, т.к. траектория представляет собой прямую, откажемся от него.
Перед тем, как вовсе забыть о существовании t2
- добавим записи в ОДЗ:
Исходя из корня в t1 и t2, вносим в ОДЗ:
V0y^2 - 2*(y-y0) >=0
Из этого получается:
V0y >= (2*(y-y0))^0.5
V0y <= (2*(y-y0))^0.5
Также исходя из того, что время не может быть < 0:
V0y >= (V0y^2 - 2*(y-y0))^0.5
Добавим в ОДЗ также информацию по X:
V0x!=0
(x-x0)/V0x>0
Объединяем оба уравнения (t и t1) для получения функции
(x-x0)/V0x = V0y + (V0y^2 - 2*(y-y0))^0.5
Из него получаем зависимость между начальными скоростями
Можем из одз взять случайное число V0x и найти для него V0y или наоборот)
Как-то так, любые комментарии и дополнения приветствую. Рассмотрю и постараюсь дополнить ответ.