Использование максимального ускорения aaa для смещения ddd с начальной скоростью v0v0v_0 и конечной скоростью v1v1v_1

Проблема

Моя цель - переместить объект из точки а в точку б (смещение г ) как можно быстрее, используя максимально доступное ускорение а м а Икс , учитывая начальную скорость в 0 и конечная скорость в 1 .

Разработка

Я работаю над физикой космического корабля, что означает отсутствие трения или сопротивления. Направление объекта не обязательно параллельно направлению его скорости, равно как и начальная и конечная скорости не обязательно параллельны.


Решение для одного измерения

Я начал с решения этого в одном измерении, используя формулы для постоянного ускорения , а именно:

г "=" в 1 2 в 0 2 2 а
Как подсказывает мне моя интуиция, должно быть смещение г 0 где постоянное ускорение а м а Икс выполняется (где объект достигает максимальной скорости в м а Икс ) с последующим смещением г 1 где постоянное замедление а м а Икс выполняется. Из приведенного выше уравнения и из:

г "=" г 0 + г 1

Мы находим, что:

г "=" в м а Икс 2 в 0 2 2 а м а Икс + в 1 2 в м а Икс 2 2 а м а Икс

Решение для в м а Икс дает:

в м а Икс 2 "=" 2 а м а Икс г + в 1 2 + в 0 2 2

Используя эту информацию, я могу ускорить объект до тех пор, пока в м а Икс достигается, а затем замедлить его.


Решение для 3-х измерений

Сделать это в 3D немного сложнее. я предполагаю, что | | а | | должно быть постоянным и равным максимально доступному ускорению а м а Икс . Моей первой попыткой здесь было вычислить в м а Икс (как выше) для каждой оси отдельно. Однако проблема заключается в том, чтобы найти правильное распределение ускорения по каждой оси при изменении смещения (при наличии движущейся цели), чтобы объект, например, не вышел на орбиту.

В другой попытке я сделал следующий расчет пружины / демпфера, чтобы найти а :

с "=" в 1 в 0 + г
а "=" с | | с | | * а м а Икс
Это хорошо работает при ускорении, но замедление начинается слишком рано.

Я пытался найти в Интернете эту информацию, но безрезультатно, какие-либо предложения?

Если вам нравится этот вопрос, вы также можете прочитать этот пост Phys.SE.
Являются в 1 и в 2 не обязательно параллельно?
Интересная ссылка @Qmechanic, она очень похожа, хотя ее нелегко применить в трех измерениях.
@ ja72 начальная и конечная скорости не обязательно параллельны.

Ответы (2)

В итоге я использовал решение Кристера Свана из его блога: http://mmoarch.blogspot.se/2012/05/computing-space-travel.html .

Траектория аппроксимируется, а затем оптимизируется методом деления пополам. Почти идеальный результат обычно достигается после 10 итераций. См. полное решение (реализация Java) по адресу: http://mmoarch.blogspot.se/2012/05/computing-space-travel-implementation.html .

Проблема. На объект массы м находится в р А "=" ( 0 0 0 ) со скоростью в А "=" ( в А 0 0 ) и должен достичь точки р Б "=" ( г Икс г у 0 ) со скоростью в Б "=" ( в Б потому что θ в Б грех θ 0 ) в минимальное время, когда величина ускорения ограничена | а | г .

Давайте приступим к общему решению и попробуем оптимизировать его в конце. Я предлагаю процесс из пяти шагов (вдохновленный вождением гоночного автомобиля). Я меняю обозначения, чтобы лучше отслеживать шаги. Также вектор направления в A равен е А "=" ( 1 0 0 ) а в Б есть е Б "=" ( потому что θ грех θ 0 ) . Также нормальные векторы н А "=" ( 0 1 0 ) и н Б "=" ( грех θ потому что θ 0 ) , где θ требуемый угол поворота между A и B . Это можно найти по потому что θ "=" ± в А в Б | в А | | в Б | . Чтобы найти использование знака с я г н ( к ^ ( в А × в Б ) ) чтобы увидеть, нужно ли вам повернуть налево или направо.

  1. Разогнаться до максимальной скорости в 1 по прямой от начальной точки р 0 "=" р А и скорость в 0 "=" в А е А . Конечная скорость в 1 "=" в 1 е А , позиция р 1 "=" р А + в 1 2 в А 2 2 г е А , и время т 1 "=" в 1 в А г .

  2. Замедление до желаемой скорости поворота в С по прямой. Конечная скорость в 2 "=" в С е А , позиция р 2 "=" р 1 + в 1 2 в С 2 2 г е А , и время т 2 "=" т 1 + в 1 в С г .

  3. Поверните, чтобы выровнять свою скорость с конечной скоростью в Б и положение вдоль прямой линии, определяемой конечным местоположением р Б и направление скорости. Радиус поворота р "=" в С 2 г с я г н ( θ ) . Конечная скорость в 3 "=" в С е Б , позиция р 3 "=" р 2 + ( н А н Б ) в С 2 г с я г н ( θ ) , и время т 3 "=" т 2 + в С г θ .

  4. Разогнаться до максимальной скорости в 4 по прямой. Конечная скорость в 4 "=" в 4 е Б , позиция р 4 "=" р 3 + в 4 2 в С 2 2 г е Б , и время т 4 "=" т 3 + в 4 в С г .

  5. Замедлить до конечной точки р Б и скорость в Б "=" в Б е Б на прямой линии. Конечная скорость в Б , позиция р Б "=" р 4 + в 4 2 в Б 2 2 г е Б , и время т Б "=" т 4 + в 4 в Б г .

Эскиз

Общее время

т "=" 1 г ( 2 в 1 + 2 в 4 + ( θ 2 ) в С ) 1 г ( в А + в Б )
где в 1 , в 4 и в С неизвестны. Окончательная позиция
г Икс "=" 2 в 1 2 в А 2 в С 2 2 г + 2 в 4 2 в Б 2 в С 2 2 г потому что θ + в С 2 г | грех θ |
г у "=" 2 в 4 2 в Б 2 в С 2 2 г грех θ + в С 2 г ( 1 потому что θ ) с я г н θ

Конечная позиция используется для нахождения скоростей в 1 и в 4

в 1 "=" в А 2 2 + в С 2 2 + г ( г Икс грех θ г у потому что θ ) грех θ в С 2 | загар θ 2 |
в 4 "=" в Б 2 2 + в С 2 2 + г г у грех θ в С 2 | загар θ 2 |

В конце концов, время есть функция в С только, но оптимизировать эту функцию непросто. Рассмотрим решение следующих

г т г в С "=" 1 г ( 2 г в 1 г в С + 2 г в 4 г в С + θ 2 ) "=" 0

Спасибо за ответ, это хорошее решение для гоночных автомобилей. К сожалению, я работаю над физикой космического корабля, поэтому оптимальный маршрут немного отличается, смотрите мое обновление.
Мне очень понравился ваш метод John Alexiou, в случае, когда нет трения, как в случае с космическим кораблем, нужно обеспечить тягу, которую нужно варьировать, чтобы достичь нужной точки при всех ограничениях. Как вы можете изменить свое решение, не могли бы вы сказать мне? очень интересно попробовать решить
@ Парацетамол - я не буду изменять свой ответ на вопрос в соответствии с вашими конкретными потребностями для несвязанного вопроса. Пожалуйста, опубликуйте новый вопрос с требованиями, которые у вас есть.
Я не имел в виду, что вы его изменили, я имел в виду, что произойдет в этом случае, так как это также то, о чем здесь спрашивал оператор (просто в качестве комментария здесь), не редактируя ответ
@ Парацетамол - для прохождения кривой необходима перпендикулярная тяга в дополнение к линейной тяге для ускорения и замедления. Если касательный вектор е ^ а вектор нормали н ^ затем
в "=" в е ^ а "=" в ˙ е ^ + в 2 р н ^
это то, как скорости и ускорения разлагаются на тангенциальное и нормальное направления.