Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Найти точку пересечения двух движимых объектов 
:(
    Опции темы
ksnk
Дата 18.5.2016, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 7
Всего: 386



Цитата(anmig @  18.5.2016,  15:59 Найти цитируемый пост)
которая преследует самолет (самонаводящийся снаряд)

А самолеты не маневрируют?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
anmig
Дата 19.5.2016, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 17.5.2016

Репутация: нет
Всего: нет



Цитата(ksnk @ 18.5.2016,  18:17)
А самолеты не маневрируют?

Маневрируют. Поетому в каждом каждре и пересчитывается траектория ракеты, чтобы постараться догнать самолет.
Поэтому переходим ко второму пункту.
Цитата

betha=arcsin(sin(alpha)*a/b)

Проверил, работает. Спасибо, ksnk, то что нужно. Кстати, заметил, что если скорость пули меньше скорости самолета, она никогда не догонит самолет. Потому, что a/b всегда будет давать меньше еденицы. А умножив на sin(alpha) то значение будет больше 1, что неприемлемо для arcsin. И на практике так же - обе траектории будут стремиться к паралельности.
Теперь второй вопрос. Как построить логику выстрела, что делать если решения нет. Ведь самолеты в некоторое время могут маневрировать, в некоторых случаях летят равномерно прямолинейно. Если пуля знает что никогда не столкнется с самолетом, но она должна все равно выстрелить. Как ей лететь приблизительно в район самолета (+- некоторое отклонение)?
Как в эту формулу внести погрешность? Ведь самолет и пуля - это не точки, а объекты с размерами. Учитывая, что у них есть размеры - гараздо больше шансов что они столкнутся.

Это сообщение отредактировал(а) anmig - 19.5.2016, 10:53
PM MAIL   Вверх
Akina
Дата 19.5.2016, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 453



Цитата(anmig @  19.5.2016,  11:52 Найти цитируемый пост)
если скорость пули меньше скорости самолета, она никогда не догонит самолет.

Представь на секунду, что траектория самолёта проходит через точку, в которой расположена пушка...
Цитата(anmig @  19.5.2016,  11:52 Найти цитируемый пост)
Как построить логику выстрела
Навскидку...
Параметры самолёта известны - в т.ч. и его способность изменять траекторию (максимальное угловое ускорение). Исходя из этих данных, рассчитывается точка поражения такая, что при максимальном уклонении снаряд до поражения проходит максимальный путь. Затем на такой траектории рассчитывается точка максимального приближения цели к орудию. Если при выстреле, когда самолёт окажется в этой точке, он не может быть поражён, можно вообще не стрелять. Иначе нужно стрелять именно в момент нахождения самолёта в этой точке. Если траектория самолёта отклоняется от этой расчётной - всё пересчитывается.
Впрочем, это всё при условии, что зона поражения точечная. Если она объёмна, всё ещё сложнее.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
ksnk
Дата 19.5.2016, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 7
Всего: 386



Вообще-то прицеливание в "точку попадания", если цель обязательно будет маневрировать - не самая удачная стратегия. Если самолет начнет уклонение в момент выстрела - это будет заметно.
Изменения вектора скоростей у самолета и пули моментальны или инерция какая-то есть? 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Akina
Дата 19.5.2016, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 453



Цитата(ksnk @  19.5.2016,  12:22 Найти цитируемый пост)
прицеливание в "точку попадания", если цель обязательно будет маневрировать - не самая удачная стратегия.

Удачная стратегия - это прицеливание в "точку попадания" и выстрел именно в момент, когда поражение произойдёт на минимальном расстоянии от орудия. Собственно описанный мной алгоритм и есть попытка приблизиться к такой стратегии в расчёте на максимально эффективные действия цели по уклонению и при условии единственности выстрела. Просто надо его дорихтовать до рабочего состояния.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
anmig
Дата 19.5.2016, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 17.5.2016

Репутация: нет
Всего: нет



Цитата(Akina @ 19.5.2016,  11:05)
Представь на секунду, что траектория самолёта проходит через точку, в которой расположена пушка...

Действительно, вы правы. Проверил - действительно при маленьких углах формула с арксинусом решает задачу.
Цитата

Вообще-то прицеливание в "точку попадания", если цель обязательно будет маневрировать - не самая удачная стратегия

Самолетом управляет игрок, пушкой - компьютер. Сначала я делал выстрел прямо в точку положения самолета на момент выстрела. Смотрелось очень дико: самолет уже был на большом расстоянии когда пуля достигала этой точки. Эти пушки настолько тупыми выглядели что играть вообще было бессмысленно. Если пушка всегда будет идеально попадать в цель - игра тоже будет неинтересна и непроходима.
Поэтому в идеале должно быть так:
Пушка вычисляет угол перехвата. Выстреливает. Пока пуля летит - игрок имеет шанс изменить курс самолета, если не успел -  попадание.
По формуле с арксинусом вычисляю угол перехвата. Если решение есть - стреляю (попаду, не попаду - зависит от умения игрока). Если решения нет, то высчитываю приблизительный район столкновения и стреляю туда (вдруг игрок сам наткнется на пулю). Но как высчитать этот "приблизительный" угол, если формулы дадут лишь точный угол (точку столкновения), или вообще ничего не дадут.
К сожалению алгоритм Akina не могу осилить, поэтому решение от ksnk для меня единственное рабочее
PM MAIL   Вверх
ksnk
Дата 19.5.2016, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 7
Всего: 386



anmig, Я вообще не очень понимаю, зачем при таком моделировании с самонаводящимися снарядами, вообще решать сложные задачи с квадратными уравнениями или арксинусами.
У нас есть самолет со стартовым положением и скоростью. Нужно определить "точку попадания".
Будем приблизительно вычислять "подлетное время".
За первое приближение возьмем текущее положение самолета. Подлетное время снаряда - `расстояние до точки`/`скорость снаряда`. За это время самолет улетит в точку, которая вычисляется двумя операциями сложения и умножения. Время, за которое снаряд туда долетит - второе значение "подлетного времени". 
Вычисляем разницу между временами. Если разница велика - повторить.
По подлетному времени вычисляем точку и туда стреляем.  smile Больше 2х итераций, скорее всего, не нужно.

Зачем точное решение, если снаряд подруливает?...

Добавлено @ 15:30
Кстати, это решение всегда дает направление выстрела, так что если по формуле не получается - можно стрелять так - вдруг юзер испугается...

P.S  Да, вычисление расстояния - это еще и корень квадратный, так что простой арифметикой не обойтись...

Это сообщение отредактировал(а) ksnk - 19.5.2016, 15:37


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
anmig
Дата 20.5.2016, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 17.5.2016

Репутация: нет
Всего: нет



Цитата(ksnk @ 19.5.2016,  15:26)
anmig, Я вообще не очень понимаю, зачем при таком моделировании с самонаводящимися снарядами, вообще решать сложные задачи с квадратными уравнениями или арксинусами.

Внесу точность:
Самонаводящиеся снаряды - это ракеты. О них речь не шла. Они в каждом кадре смотрят где самолет и преследуют его. У них есть своя скорость и свой радиус разворота (скорость реагирования на маневры самолета).  
А говорим мы о пуле, которая летит равномерно и прямолинейно. Пушка должна выстрелить в самолет, а тот должен уворачиваться от нее. Если столкновение возможно - стрелять в точку, высчитанную по формуле. Если столкновение невозможно - все равно выстрелить приблизительно в место где игрок мог бы наткнутся на пулю (вдруг он ее не заметит и сманеврирует как раз в ее сторону). Если не наткнется, то пуля летит, пока не вылетит за екран.
Цитата

Зачем точное решение, если снаряд подруливает?...

Пуля, о которой всю тему мы обсуждаем не подруливает. Но и очень точное решение мне тоже не нужно. Ведь как самолет, так и пуля имеют габариты.
Цитата

За первое приближение возьмем текущее положение самолета. Подлетное время снаряда - `расстояние до точки`/`скорость снаряда`. За это время самолет улетит в точку, которая вычисляется двумя операциями сложения и умножения. Время, за которое снаряд туда долетит - второе значение "подлетного времени". 

Мне такое пришло в голову самым первым, но я не смог додумать что дальше.
Цитата

Вычисляем разницу между временами. Если разница велика - повторить.

Ну, высчитал, допустим, два времени. А что повторить? Как дальше?
PM MAIL   Вверх
ksnk
Дата 20.5.2016, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 7
Всего: 386



Цитата(anmig @  20.5.2016,  13:25 Найти цитируемый пост)
Ну, высчитал, допустим, два времени. А что повторить? Как дальше? 

Для пули - лучше считать точно, так как это решение будет довольно грубым, а при "точном" решении еще и рессурсоемким. 

Основной смысл - мы приближенно вычисляем точку взрыва. В качестве промежуточных решений берутся 
1 - Точка - расположение цели, время - подлетное время до точки. 
2...N - Точка - точка, которую достигнет цель через время, вычисленное на предыдущем этапе. время - время достижения новой точки.

Решили, если расстояние между соседними точками N-1 и N станет меньше радиуса поражения снаряда.
Не решили, если за M итераций не получили решения.



Это сообщение отредактировал(а) ksnk - 20.5.2016, 14:08


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
ksnk
Дата 22.5.2016, 02:38 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 7
Всего: 386



Выкопал свой староглиняный проект, уж не помню какого года. Немножко сдул пыль и исправил накопившиеся ошибки.
Делалось все это как проверка возможностей анимации на Javascript, с планетами и снегом. Заодно и что-то там про ооп на javascript. Тогда мне это показалось слишком тяжелым для IE6, хотя на FF2.0 бегало достаточно шустро  smile 
Добавил в список сценариев еще один вариант - "расстрел вертолета", с расчетом точки попадания посредством арксинусов. Вроде попадает, точности хватает.



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
anmig
Дата 22.5.2016, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 17.5.2016

Репутация: нет
Всего: нет



Цитата(ksnk @ 22.5.2016,  02:38)
Добавил в список сценариев еще один вариант - "расстрел вертолета", с расчетом точки попадания посредством арксинусов. Вроде попадает, точности хватает.

И у меня работает без проблем. Кстати, на практике почти всегда решение есть, т.к. пуля всегда быстрее самолета, так что решил не заморачиваться и поставил условие, если значение передаваемое в asin вне предела -1:1 то просто не стреляю. Правда пока не поймал такого случая.
ksnk, спасибо еще раз, и спасибо всем, кто помогал
PM MAIL   Вверх
ksnk
Дата 23.5.2016, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 7
Всего: 386



Akina, Кстати - про эллипс - слишком осторожно, похоже что геометрическое место точек попадания - окружность. Аналитически это можно увидеть из формулы на второй странице. Если уточнить коэффициенты у x^2 и y^2 - они окажутся равны.  



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
irinazanuda
Дата 17.7.2016, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 911
Регистрация: 23.6.2010

Репутация: нет
Всего: 18



А если объекты недвижимые.. где точку найти?
PM MAIL   Вверх
ksnk
Дата 19.7.2016, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 7
Всего: 386



Цитата(irinazanuda @  17.7.2016,  17:57 Найти цитируемый пост)
А если объекты недвижимые.. где точку найти? 

Дык, по формуле  smile Подставляешь, получаешь... (сюрприз) - ту же точку, в которой находится цель. Если формула Akina  - окружность нулевого радиуса. 
Или я что-то не понял?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.1555 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.