PMG
https://forum.pmg.org.ru/

О оптимальном поиске пути.
https://forum.pmg.org.ru/viewtopic.php?f=3&t=89
Страница 1 из 2

Автор:  alex_ez [ 25 сен 2005 10:18 ]
Заголовок сообщения:  О оптимальном поиске пути.

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

Вопрос мой такой:
1. Кто какими поисками пользуется(кроме а*, д*, волнового)?
2. Кто знает о так называемом "ray-tracing" поиске пути (карта должна быть векторная, или приводимая к векторной) ?

И еще один вопрос по поводу ray-tracing поиска.
Но сначала кратко расскажу, что это такое.

допустим, карта у нас 1.0х1.0(х1.0 для 3д, но пока рассмотрим вариант для плоскости) (работаем с числами с плавающей точкой (запятой)), реальный размер карты - не по сути.
местонахождение обьектов определяется как 2(3 для 3д) переменные, значение которых от 0.0 до 1.0 (если не учитывать их ширину).

конкретный пример для 2д:
у нас есть препятствие от (0.2,0.5) до (0.9,0.5). (стена посреди карты, расположенная горизонтально, но не на всю ширину карты, таким образом, что справа просвет до границы - 0.1 карты, а слева 0.2).
обьект наш находится в точке (0.5,0.0). шириной обьекта можно пренебречь.
а путь его лежит к точке (0.5,1.0). шириной цели тоже пренебрегаем.

как ему пройти?.. строится прямая от обьекта до цели, при пересечении с какойто преградой - мы режем на первом пересечении наш путь, и пытаемся повторить снова поиск уже для новых двух ломаных.
когда все полученные линии не пересекают статичных обьектов карты, мы даем эти точки, по которым должен будет пройти наш обьект, и посылаем его по ним.
варианты о встрече с другими обьектами здесь не учитаны, но я так понимаю, что их надо обрабатывать при самой встрече по немного измененному поиску ломаной от текущей позиции до той точки, куда шел обьект до встречи (то есть до ближайшей не достигнутой точки).

что скажете?.. как оптимально можно это просчитать?

p.s. Не могу обойтись без копирайтов, способ этот я узнал от В.Медноногова. http://pmg.org.ru/ai/path.htm, там же есть ссылка на этот способ, но он там не "шлифован". ;)

Автор:  MagicWolf [ 26 сен 2005 10:53 ]
Заголовок сообщения: 

Обычно используют стандартный A*, но путь делают более сглаженным. Так же интенсивно используют карты влияния. Очень интересны методы управляемого поведения:
http://www.red3d.com/research.html

Много интересного есть в книге:
O'Reilly - AI for Game Developers.chm

ray-tracing - это метод прокладывания пути до ближайшего препятствия. В результате образуется дерево, которое так же можно пройти A*.

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

Автор:  alex_ez [ 26 сен 2005 11:02 ]
Заголовок сообщения: 

Дык через А* нужно сначала перевести вертексную карту в 2д. а после уже искать путь. И получается очень много проблем, хотя и мелких. И скорость. Скорость же ниже?..

а O'Reilly - AI for Game Developers.chm есть?..
можно попросить выслать?.. на адрес в личных.

через ray-tracing разве не быстрее, чем через А*?...

А об D* что можно сказать?..

Автор:  MagicWolf [ 26 сен 2005 11:21 ]
Заголовок сообщения: 

D* - это только когда часть карты заранее не видна. A* и ray-tracing надо совмещать, т.е. строить дерево лучей и в нем искать путь по A*. Книга, есть могу выложить куда-нибудь.

Автор:  alex_ez [ 26 сен 2005 11:29 ]
Заголовок сообщения: 

Буду премного благодарен за книгу.
Есть хостинг?.. или дать фтп?..

Автор:  alex_ez [ 26 сен 2005 11:46 ]
Заголовок сообщения: 

MagicWolf писал(а):
D* - это только когда часть карты заранее не видна. A* и ray-tracing надо совмещать, т.е. строить дерево лучей и в нем искать путь по A*. Книга, есть могу выложить куда-нибудь.

ну а если невидимую часть карты делать непроходимой...?
тоже самое же получится...

Автор:  MagicWolf [ 26 сен 2005 13:51 ]
Заголовок сообщения: 

А зачем это надо?! Делать не проходимой? Себе усложняешь задачу. D* используют для роботов, если карты нет. А так даже нынешние роботы вначале проходят, по заданной местности, изучают ее, а потом уже свободно по ней перемещаются.

В играх как раз все проще, достаточно waypoints, так как можно симулировать нужное поведение у отдельных units. Вот забыл, где-то видел, описание алгоритма, там комнаты разделены на участки просматриваемой местности, и между ними проведены пути (например, путь для быстрого перемещения, путь для скрытого подхода). И юниты перемещаются именно рядом с этими "нитями Арианды".

Автор:  XPEH [ 26 сен 2005 17:36 ]
Заголовок сообщения: 

А как посоветуеш мне найти путь в 3д???

У меня есть холм на каторый видет извилистая тропинка остальное естены настолько отвесны что поним нельзя поднятся... как прописать путь???

Автор:  MagicWolf [ 29 сен 2005 15:25 ]
Заголовок сообщения: 

Так и пиши, ставь waypoint1(0,0,0) далее wp2(0,2,2) и что-то вроде этого далее, просто набор точек, между которыми в прямой видимости можно пройти. Можно вообще просто пометить нужные полигоны как проходимые.

Вот ключевые слова для поиска подобных систем:
pathfind map node network
pathfind navigation mesh system

Автор:  MagicWolf [ 29 сен 2005 16:28 ]
Заголовок сообщения: 

navigation mesh описано в AI Wisdom 1, Game Programming Gems 3.

Автор:  MagicWolf [ 29 сен 2005 16:42 ]
Заголовок сообщения: 

Во готовая либа - http://www.pathengine.com. Там есть что-то вроде описания, можно что-то выудить.

Автор:  XPEH [ 29 сен 2005 19:23 ]
Заголовок сообщения: 

а без вейпоинтов??? так как пространство у меня будит генерится случайным образом (образно)...

Автор:  MagicWolf [ 30 сен 2005 17:04 ]
Заголовок сообщения: 

Без waypoint довольно сложная задача. Но принцип один - A*, только пременять его надо к графу. Граф образуется из проходимых полигонов. Например, для простоты можно принять, что можно пройти от от одного полигона к смежному полигону, через центр обеих полигонов и центр смежной линии между полигонами.

Автор:  XPEH [ 30 сен 2005 19:16 ]
Заголовок сообщения: 

лано попробую замутит с полигонами =)

Автор:  MagicWolf [ 03 окт 2005 13:42 ]
Заголовок сообщения: 

AI Wisdom 1 у меня есть ...

Страница 1 из 2 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/