Расчет траектории полета ракеты по орбите перед стрельбой


10

Я создаю игру с Unity3D. Это клон Gravity Wars . Обе башни и ИИ стреляют ракетами друг в друга (задают переменные «Угол» и «Мощность»), стараясь не сбивать ракеты на планетах. Но вот мой вопрос: как заставить ИИ рассчитать мощность и угол до стрельбы по его ракете, учитывая силу тяжести планеты?

Ответы:


5

Такая система с несколькими телами будет хаотичной. Я не думаю, что вы сможете решить уравнение для него в режиме реального времени. Лучшее, на что вы можете надеяться, - это найти решение с использованием генетического алгоритма;

1: получить число (например, 100) случайных решений (угол, пары сил).

2: смоделируйте эти решения.

3: если что-то из этого, в конечном итоге попадет в цель (или приблизится достаточно близко), Готово! в противном случае продолжайте.

4: выберите 10 лучших решений (те, которые окажутся ближе всего к цели)

5: из этих 10 решений создайте 10 детей для каждого, случайным образом регулируя их угол и мощность.

6: теперь у вас есть 100 новых решений, вернулись к шагу 2

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

Даже такой подход не гарантирует, что найдется хорошее решение, потому что; 1. решение может не существовать 2. в хаотической системе небольшие изменения в решении могут оказать огромное влияние на результат


1

Вы должны быть в состоянии смоделировать выстрел, не рисуя его.

Тогда вы можете сказать, имитировать 10 выстрелов, а затем взять ближайший из 10.


0

Учитывая, что траектория полета ракеты основана на входах Angleи Power, вы должны быть в состоянии решить (получить точный ответ) из обратного уравнения.

Основные (псевдо) ИИ шаги следующие:

  1. Выберите случайный Powerуровень. Неважно, что является точным значением (в определенной степени), если оно находится в разумных пределах.
  2. Решите уравнение (инвертированное из фактического пути), чтобы получить точное (ну, как можно ближе к двойникам) Angle.
  3. Выберите (изменяемое) случайное смещение от Angle, чтобы приспособиться к « сложности » ИИ.
  4. Запустите ракету, как игрок, в (случайном) Powerи (рассчитанном) Angle.

Конечно, вы могли бы просто запустить ИИ на случайных уровнях для обоих входов, что могло бы дать некоторые интересные результаты ...


Этот метод имеет смысл, когда все, что у вас есть, это гравитация прямо вниз и постоянный ветер, но что вы используете для «уравнения, чтобы дать точное Angle», когда у вас есть несколько гравитационных тел, рассеянных по вашей вселенной? Их тяга зависит от вашей текущей позиции. Некоторые снимки могут быть невозможны.
Джон Макдональд

@John - Если выстрел совершенно невозможен (не учитывая плохой выбор входной мощности), это серьезная проблема с вашим игровым полем. В играх такого типа любой из игроков должен быть заменен на ИИ. Конечно, уравнения становятся более сложными (и с несколькими телами, очень быстро), но это все же должно быть возможно.
Заводная муза

Справедливо. Но знаете ли вы, что бы вы использовали для уравнения? Я думаю, именно поэтому этот вопрос был создан.
Джон Макдональд

Джон прав: я ищу это уравнение.
Онофрио

@Onofrio - Извините, у меня нет соответствующих уравнений ... и похоже, что вам нужно исчисление с несколькими переменными, чтобы сделать это "правильно".
Заводная муза

0

Как насчет того, чтобы сделать это реалистичным, не подсчитав их, а начав с догадок и корректировок?

Когда я играл в Gravity Wars, это то, что я делал; начните с полуслучайной мощности и отрегулируйте соответственно с шагом. В течение нескольких кадров вы очень близко.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.