Моя цель - переместить объект из точки а в точку б (смещение ) как можно быстрее, используя максимально доступное ускорение , учитывая начальную скорость и конечная скорость .
Я работаю над физикой космического корабля, что означает отсутствие трения или сопротивления. Направление объекта не обязательно параллельно направлению его скорости, равно как и начальная и конечная скорости не обязательно параллельны.
Я начал с решения этого в одном измерении, используя формулы для постоянного ускорения , а именно:
Мы находим, что:
Решение для дает:
Используя эту информацию, я могу ускорить объект до тех пор, пока достигается, а затем замедлить его.
Сделать это в 3D немного сложнее. я предполагаю, что должно быть постоянным и равным максимально доступному ускорению . Моей первой попыткой здесь было вычислить (как выше) для каждой оси отдельно. Однако проблема заключается в том, чтобы найти правильное распределение ускорения по каждой оси при изменении смещения (при наличии движущейся цели), чтобы объект, например, не вышел на орбиту.
В другой попытке я сделал следующий расчет пружины / демпфера, чтобы найти :
Я пытался найти в Интернете эту информацию, но безрезультатно, какие-либо предложения?
В итоге я использовал решение Кристера Свана из его блога: http://mmoarch.blogspot.se/2012/05/computing-space-travel.html .
Траектория аппроксимируется, а затем оптимизируется методом деления пополам. Почти идеальный результат обычно достигается после 10 итераций. См. полное решение (реализация Java) по адресу: http://mmoarch.blogspot.se/2012/05/computing-space-travel-implementation.html .
Проблема. На объект массы находится в со скоростью и должен достичь точки со скоростью в минимальное время, когда величина ускорения ограничена .
Давайте приступим к общему решению и попробуем оптимизировать его в конце. Я предлагаю процесс из пяти шагов (вдохновленный вождением гоночного автомобиля). Я меняю обозначения, чтобы лучше отслеживать шаги. Также вектор направления в A равен а в Б есть . Также нормальные векторы и , где требуемый угол поворота между A и B . Это можно найти по . Чтобы найти использование знака чтобы увидеть, нужно ли вам повернуть налево или направо.
Разогнаться до максимальной скорости по прямой от начальной точки и скорость . Конечная скорость , позиция , и время .
Замедление до желаемой скорости поворота по прямой. Конечная скорость , позиция , и время .
Поверните, чтобы выровнять свою скорость с конечной скоростью и положение вдоль прямой линии, определяемой конечным местоположением и направление скорости. Радиус поворота . Конечная скорость , позиция , и время .
Разогнаться до максимальной скорости по прямой. Конечная скорость , позиция , и время .
Замедлить до конечной точки и скорость на прямой линии. Конечная скорость , позиция , и время .
Общее время
Конечная позиция используется для нахождения скоростей и
В конце концов, время есть функция только, но оптимизировать эту функцию непросто. Рассмотрим решение следующих
Qмеханик
Джон Алексиу
Джонатан Перссон
Джонатан Перссон