Уникаючи орбіти в гонитві за поведінкою


9

У мене є ракета, яка переслідує поведінку, щоб відстежувати (і намагатися вражати) свою (нерухому) ціль.

Це прекрасно працює, доки ви не задубите, коли запускаєте ракету. Якщо ви страйфуєте, ракета має тенденцію до орбіти своєї цілі.

введіть тут опис зображення

Я зафіксував це, прискоривши спочатку тангенціально до цілі , вбивши спочатку тангенціальну складову швидкості, а потім перетворившись на ціль.

введіть тут опис зображення

Тому я прискорююсь до -vT, поки vT майже дорівнює 0. Потім прискорююсь у напрямку vN.

Хоча це працює, я шукаю більш елегантне рішення, де ракета здатна завдати удару по цілі без явного вбиття спочатку дотичної складової.


Я не думаю, що ви зможете отримати задоволення, не пояснивши, який ваш алгоритм управління. Я впевнений, що проблема полягає у вашій евристиці.
sam hocevar

1
Власне, це була відповідь, яку я використав
бобобо

Відповіді:


5

Схоже, проблема полягає в тому, що ракета просто спрямована на ціль, не враховуючи її швидкості струму. Призначте своїй ракеті максимальний кут, на який тяга може відхилятися від лінії руху.

При кожній ітерації наведення ви обчислюєте її швидкість, перпендикулярну цілі. З'ясуйте, на скільки він повинен нахилити двигун, щоб звести нанівець цей компонент своєї швидкості, а потім обріжте це на максимум, що може нахилити двигун.

Під час першої частини польоту він рухатиметься дещо праворуч від прямої лінії на малюнку №2, але, коли він летить, двигун викреслить цей компонент, і в кінцевому підсумку рушить прямо до цілі.

Зауважте, що в цьому сценарії буде лише одна рамка, в якій двигун має відхилення нічого, крім нуля або макс. Якщо ви відстежували рухому ціль, ви могли отримувати менші відхилення на кожному циклі в міру переміщення цілі.


4

Можливо, це не вишукане рішення, яке ви шукаєте, але я виявив, що якщо я сповільнить ракету, якщо вона пропустить, коли вона наблизиться до цілі, вона ефективно відстежує і повертається швидше і може вдарити в ціль. Ви можете збільшити швидкість повороту ракети, коли вона наближається, а не зменшувати швидкість, але це може дати гравцям "ого, я впевнений, що хотів пропустити" неприємний сюрприз.

Це може виглядати не так чудово, але це, безумовно, зупиняє ракети на орбіті, а також у ворожих колах, що раструбують ракету, поки пальне не закінчиться.

Ось демонстрація, яку я зібрав у своїй реалізації (третя чи четверта ракета демонструє це, і знову о 1:05): http://www.youtube.com/watch?v=9uiGMC_nH2w

Ви також можете підвищити точність ракети, оскільки вона також наближається до цілі (оскільки вона має ближче підпис до блокування). Це також показано на відео приблизно через хвилину дюйма. Червоне коло показує фактичну ціль ракети. Це дає йому хаотичний шлях польоту, коли він знаходиться на великій дальності, а потім випрямляє ближче до нього.

Як я кажу, це може бути не відповідь, яку ви шукаєте, але, сподіваюся, це допоможе, якщо лише трохи.


Це досить круто. Я збираюся на максимальне прискорення, але уповільнення ракети - це акуратний трюк (і його можна використовувати, якщо ви називатимете їх "
трюковими

4

Інтуїція

Ось один із способів: повернемо вашу діаграму.

обертання оригінальної проблемної ілюстрації

Тепер ракета - це гармата !

Фізика

Він має фіксоване прискорення "вниз", тобто перпендикулярно вектору від місця його стрільби до цілі. Я намалював це вище як пунктирна зелена лінія. Назвемо це еталонним горизонтом . (Зверніть увагу, що цей опорний горизонт є постійним! Ракета була випущена з нерухомого положення з фіксованим положенням як ціль.)

Ми знаємо (з wikipedia ) для гарматного опору без опору повітря, що d = v^2 * sin(2 * theta) / g, де

  • d - пройдена горизонтальна відстань (відстань між місцем стрільби та ціллю)
  • v - швидкість, яку вистрілив снаряд
  • theta- кут відносно горизонту, в який був вистрілений снаряд ( кут вектора напрямку вогню від опорного горизонту )

Перестановка рівняння для gдай g = v^2 * sin(2 * theta) / d.

Константа в рівнянні гарматного кулі, g- це прискорення за рахунок сили тяжіння . Ми можемо вважати це прискоренням через ракетне рушійне управління . Це теж добре - це все-таки постійне прискорення в постійному напрямку .

А тепер що?

Запустіть це рівняння, gколи ви вистрілите ракету. Він підкаже вам, наскільки прискорити ракету перпендикулярно до опорного горизонту, щоб потрапити в ціль. Оскільки напрямок цього прискорення є постійним, орбіта не формується.

Бум.


Це акуратний підхід. Я думаю, що це призведе до того, що ракета простежить коло , ви подаєте відцентрову силу, необхідну для орбіти кола, що може вплинути на ціль. Я вважаю, що це, можливо, був підхід, який застосовували для червоних снарядів у Маріо Карт , тому що я завжди думав, що вони мають тенденцію до дуги круговим
способом

Сила, що застосовується тут, не є центропепельною. Напрямок сили перпендикулярний до опорного горизонту, який не змінюється, якщо ціль нерухома. Це означає, що орбітальна поведінка не може відбутися.
Анко

Я відредагував відповідь, щоб зробити це зрозумілішим.
Анко

@Anko: Я не впевнений, що ваша математика тут працює для рухомої цілі, як здається, це запуск для випадку ОП.
Mooing Duck

@Mooing Ви маєте рацію, це може працювати лише для переміщення цілей, якщо вони рухаються передбачувано і ви орієнтуєтесь на прогноз. Питання ж згадує конкретно мета знаходиться в нерухомому стані, хоча, в першому реченні.
Анко
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.