|
|
|
ksnk |
|
|||
прохожий Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 7 Всего: 386 |
А самолеты не маневрируют? -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
anmig |
|
||||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 17.5.2016 Репутация: нет Всего: нет |
Маневрируют. Поетому в каждом каждре и пересчитывается траектория ракеты, чтобы постараться догнать самолет. Поэтому переходим ко второму пункту.
Проверил, работает. Спасибо, ksnk, то что нужно. Кстати, заметил, что если скорость пули меньше скорости самолета, она никогда не догонит самолет. Потому, что a/b всегда будет давать меньше еденицы. А умножив на sin(alpha) то значение будет больше 1, что неприемлемо для arcsin. И на практике так же - обе траектории будут стремиться к паралельности. Теперь второй вопрос. Как построить логику выстрела, что делать если решения нет. Ведь самолеты в некоторое время могут маневрировать, в некоторых случаях летят равномерно прямолинейно. Если пуля знает что никогда не столкнется с самолетом, но она должна все равно выстрелить. Как ей лететь приблизительно в район самолета (+- некоторое отклонение)? Как в эту формулу внести погрешность? Ведь самолет и пуля - это не точки, а объекты с размерами. Учитывая, что у них есть размеры - гараздо больше шансов что они столкнутся. Это сообщение отредактировал(а) anmig - 19.5.2016, 10:53 |
||||
|
|||||
Akina |
|
|||
Советчик Профиль Группа: Модератор Сообщений: 20570 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 453 |
Представь на секунду, что траектория самолёта проходит через точку, в которой расположена пушка... Навскидку... Параметры самолёта известны - в т.ч. и его способность изменять траекторию (максимальное угловое ускорение). Исходя из этих данных, рассчитывается точка поражения такая, что при максимальном уклонении снаряд до поражения проходит максимальный путь. Затем на такой траектории рассчитывается точка максимального приближения цели к орудию. Если при выстреле, когда самолёт окажется в этой точке, он не может быть поражён, можно вообще не стрелять. Иначе нужно стрелять именно в момент нахождения самолёта в этой точке. Если траектория самолёта отклоняется от этой расчётной - всё пересчитывается. Впрочем, это всё при условии, что зона поражения точечная. Если она объёмна, всё ещё сложнее. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
ksnk |
|
|||
прохожий Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 7 Всего: 386 |
Вообще-то прицеливание в "точку попадания", если цель обязательно будет маневрировать - не самая удачная стратегия. Если самолет начнет уклонение в момент выстрела - это будет заметно.
Изменения вектора скоростей у самолета и пули моментальны или инерция какая-то есть? -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
Akina |
|
|||
Советчик Профиль Группа: Модератор Сообщений: 20570 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 453 |
Удачная стратегия - это прицеливание в "точку попадания" и выстрел именно в момент, когда поражение произойдёт на минимальном расстоянии от орудия. Собственно описанный мной алгоритм и есть попытка приблизиться к такой стратегии в расчёте на максимально эффективные действия цели по уклонению и при условии единственности выстрела. Просто надо его дорихтовать до рабочего состояния. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
anmig |
|
||||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 17.5.2016 Репутация: нет Всего: нет |
Действительно, вы правы. Проверил - действительно при маленьких углах формула с арксинусом решает задачу.
Самолетом управляет игрок, пушкой - компьютер. Сначала я делал выстрел прямо в точку положения самолета на момент выстрела. Смотрелось очень дико: самолет уже был на большом расстоянии когда пуля достигала этой точки. Эти пушки настолько тупыми выглядели что играть вообще было бессмысленно. Если пушка всегда будет идеально попадать в цель - игра тоже будет неинтересна и непроходима. Поэтому в идеале должно быть так: Пушка вычисляет угол перехвата. Выстреливает. Пока пуля летит - игрок имеет шанс изменить курс самолета, если не успел - попадание. По формуле с арксинусом вычисляю угол перехвата. Если решение есть - стреляю (попаду, не попаду - зависит от умения игрока). Если решения нет, то высчитываю приблизительный район столкновения и стреляю туда (вдруг игрок сам наткнется на пулю). Но как высчитать этот "приблизительный" угол, если формулы дадут лишь точный угол (точку столкновения), или вообще ничего не дадут. К сожалению алгоритм Akina не могу осилить, поэтому решение от ksnk для меня единственное рабочее |
||||
|
|||||
ksnk |
|
|||
прохожий Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 7 Всего: 386 |
anmig, Я вообще не очень понимаю, зачем при таком моделировании с самонаводящимися снарядами, вообще решать сложные задачи с квадратными уравнениями или арксинусами.
У нас есть самолет со стартовым положением и скоростью. Нужно определить "точку попадания". Будем приблизительно вычислять "подлетное время". За первое приближение возьмем текущее положение самолета. Подлетное время снаряда - `расстояние до точки`/`скорость снаряда`. За это время самолет улетит в точку, которая вычисляется двумя операциями сложения и умножения. Время, за которое снаряд туда долетит - второе значение "подлетного времени". Вычисляем разницу между временами. Если разница велика - повторить. По подлетному времени вычисляем точку и туда стреляем. Больше 2х итераций, скорее всего, не нужно. Зачем точное решение, если снаряд подруливает?... Добавлено @ 15:30 Кстати, это решение всегда дает направление выстрела, так что если по формуле не получается - можно стрелять так - вдруг юзер испугается... P.S Да, вычисление расстояния - это еще и корень квадратный, так что простой арифметикой не обойтись... Это сообщение отредактировал(а) ksnk - 19.5.2016, 15:37 -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
anmig |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 17.5.2016 Репутация: нет Всего: нет |
Внесу точность: Самонаводящиеся снаряды - это ракеты. О них речь не шла. Они в каждом кадре смотрят где самолет и преследуют его. У них есть своя скорость и свой радиус разворота (скорость реагирования на маневры самолета). А говорим мы о пуле, которая летит равномерно и прямолинейно. Пушка должна выстрелить в самолет, а тот должен уворачиваться от нее. Если столкновение возможно - стрелять в точку, высчитанную по формуле. Если столкновение невозможно - все равно выстрелить приблизительно в место где игрок мог бы наткнутся на пулю (вдруг он ее не заметит и сманеврирует как раз в ее сторону). Если не наткнется, то пуля летит, пока не вылетит за екран.
Пуля, о которой всю тему мы обсуждаем не подруливает. Но и очень точное решение мне тоже не нужно. Ведь как самолет, так и пуля имеют габариты.
Мне такое пришло в голову самым первым, но я не смог додумать что дальше.
Ну, высчитал, допустим, два времени. А что повторить? Как дальше? |
||||||||
|
|||||||||
ksnk |
|
|||
прохожий Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 7 Всего: 386 |
Для пули - лучше считать точно, так как это решение будет довольно грубым, а при "точном" решении еще и рессурсоемким. Основной смысл - мы приближенно вычисляем точку взрыва. В качестве промежуточных решений берутся 1 - Точка - расположение цели, время - подлетное время до точки. 2...N - Точка - точка, которую достигнет цель через время, вычисленное на предыдущем этапе. время - время достижения новой точки. Решили, если расстояние между соседними точками N-1 и N станет меньше радиуса поражения снаряда. Не решили, если за M итераций не получили решения. Это сообщение отредактировал(а) ksnk - 20.5.2016, 14:08 -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
ksnk |
|
|||
прохожий Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 7 Всего: 386 |
Выкопал свой староглиняный проект, уж не помню какого года. Немножко сдул пыль и исправил накопившиеся ошибки.
Делалось все это как проверка возможностей анимации на Javascript, с планетами и снегом. Заодно и что-то там про ооп на javascript. Тогда мне это показалось слишком тяжелым для IE6, хотя на FF2.0 бегало достаточно шустро Добавил в список сценариев еще один вариант - "расстрел вертолета", с расчетом точки попадания посредством арксинусов. Вроде попадает, точности хватает. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
anmig |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 17.5.2016 Репутация: нет Всего: нет |
И у меня работает без проблем. Кстати, на практике почти всегда решение есть, т.к. пуля всегда быстрее самолета, так что решил не заморачиваться и поставил условие, если значение передаваемое в asin вне предела -1:1 то просто не стреляю. Правда пока не поймал такого случая. ksnk, спасибо еще раз, и спасибо всем, кто помогал |
|||
|
||||
ksnk |
|
|||
прохожий Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 7 Всего: 386 |
Akina, Кстати - про эллипс - слишком осторожно, похоже что геометрическое место точек попадания - окружность. Аналитически это можно увидеть из формулы на второй странице. Если уточнить коэффициенты у x^2 и y^2 - они окажутся равны.
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
irinazanuda |
|
|||
Опытный Профиль Группа: Участник Сообщений: 911 Регистрация: 23.6.2010 Репутация: нет Всего: 18 |
А если объекты недвижимые.. где точку найти?
|
|||
|
||||
ksnk |
|
|||
прохожий Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 7 Всего: 386 |
Дык, по формуле Подставляешь, получаешь... (сюрприз) - ту же точку, в которой находится цель. Если формула Akina - окружность нулевого радиуса. Или я что-то не понял? -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |