Представьте себе «дрон» и целевую точку на 2-й плоскости. Есть восемь параметров:
P = my position
Q = target position
V = my velocity
I = my moment of inertia
w = my angular velocity
s = my angular position
T = max thrust
U = max torque
(мы просто скажем, что цель неподвижна)
Задача дрона - как можно быстрее добраться до цели, соблюдая максимальный крутящий момент и максимальную тягу. Есть только два способа применить крутящий момент, так как это только в 2d плоскости. Тяга ограничена только движением в одном направлении относительно ориентации корабля и не может быть направлена без вращения дрона. Пренебрегайте любым сопротивлением, вы можете просто притвориться, что оно плавает в 2-ом космосе. Допустим, беспилотник проверяет уравнение с интервалом времени t
(может быть, примерно каждые 0,01 секунды), включает параметры и соответствующим образом регулирует свой крутящий момент и тягу. Какими должны быть уравнения для тяги и крутящего момента?
Ответы:
В свете контекста вашего вопроса, http://nodewar.com/ , есть несколько конкретных соображений для вашего решения:
Именно эти методы я решил использовать для достижения желаемого ускорения.
Ускорение, а не скорость
Поскольку у вас уже есть заданная скорость, и ваша цель движется, вам не нужно тянуть к точке. Вам нужно тягу, чтобы изменить свою скорость до того, что должно быть. Это означает, что ваш корабль должен указывать не туда, куда он движется, а в направлении, в котором он должен ускоряться.
Направление в правильном направлении
У вас есть вектор ускорения, теперь вы хотите применить его. Определите, как далеко вы должны повернуть. Возможно, я использовал больше шагов, чем требовалось, но координаты вращения меня смущают, и я думаю, что значение вращения корабля без колпачка в любом случае является ошибкой в API.
Простая формула. Поворот все время не причиняет вреда, поэтому не пытайтесь применять значения частичного крутящего момента. Если вам нужна небольшая коррекция угловой скорости, вы все равно будете делать это определение много раз в секунду.
Менее простая формула. Наступит момент, когда вы не захотите продолжать разворачиваться, потому что в конце концов захотите остановиться. К счастью, этот предел угловой скорости означает, что вы можете быстро снизить скорость от максимальной угловой скорости до нуля. Вам нужно только рассчитать, когда это сделать.
После настройки приведенного выше кода в соответствии с вашими потребностями ваш корабль должен быстро и точно поворачиваться на любой угол, который вы указали для цели.
Скорость тарана
Так когда же засунуть? Опять же, быстрое изменение цели и другие факторы создают большие трудности в поиске точного решения. Не пытайся
В тех случаях, когда вам нужна частичная тяга, вы снова можете рассчитывать на то, что вы можете выбирать между 0 и 1 ударом много раз в секунду. Это дает вам эффективную частичную тягу без изменения фактического значения.
Удачи!
источник
Подобный вопрос, с некоторыми хорошими ответами, включая очевидное название этого целого предмета, "планирование движения":
/programming/2560817/2d-trajectory-planning-of-a-spaceship-with-physics
Как программист, мне нравится практичность предложения user470365. Тем не менее, я попробую более строгий подход. Мое предложение здесь рассчитывает полный план в начале, но я полагаю, что вы можете пересматривать столько раз, сколько пожелаете, если параметры меняются.
План
подробности
Я предлагаю итерационные методы, чтобы найти d и t :
Предполагая отсутствие тяги, пройдите по будущей траектории беспилотника, используя цикл и небольшой временной шаг:
Теперь мы нашли д и т .
Превращение
Когда я говорю «поворот к d », я действительно имею в виду, «делайте последовательность моментов так, чтобы мы вращались к d как можно быстрее, одновременно сводя угловую скорость к нулю». Вероятно, есть уравнение для этого, включающее направление тока, текущую угловую скорость и максимальное угловое ускорение, но оно усложняется из-за поворота углов.
источник