2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


В этом разделе нельзя создавать новые темы.

Если Вы хотите задать новый вопрос, то не дописывайте его в существующую тему, а создайте новую в корневом разделе "Помогите решить/разобраться (М)".

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

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

Обязательно просмотрите тему Правила данного раздела, иначе Ваша тема может быть удалена или перемещена в Карантин, а Вы так и не узнаете, почему.



Начать новую тему Ответить на тему
 
 Путь через квадрат (алгоритм обхода препятствий)
Сообщение08.10.2010, 11:49 


26/12/08
1813
Лейден
Привет, возможно это больше к программистам, тогда пожалуйста кикните в их форум. Задача следующая:
есть квадрат $[0,1]\times [0,1]$, в нем есть "дырки", выпуклые многоугольники, заданные скажем системами линейных неравенств. Мы находимся изначально в точке $(0,0)$ и попасть нам нужно в точку $(1,1)$ не пересекая эти многоугольники.
- можно на них натыкаться и потом отступать;
- размер шага любой;
- направление любое - хоть по диагонали;
- начальная и конечная точки + некоторая окрестность точно, не пересекаются с дырками. Во всех остальных местах дырки могут быть: на ребрах тоже.
- по ребрам ходить можно.
Словом, нужно построить (любую) ломанную, которая ведет из начальной точки в конечную, не пересекая дырки.
Есть ли алгоритмы, разработанные по этой проблеме?

 Профиль  
                  
 
 Re: Путь через квадрат
Сообщение08.10.2010, 11:51 
Заслуженный участник
Аватара пользователя


18/05/06
13438
с Территории
Короче, как в Варкрафте крестьянину ткнёшь "иди туда", и он идёт.

 Профиль  
                  
 
 Re: Путь через квадрат
Сообщение08.10.2010, 11:57 
Заслуженный участник
Аватара пользователя


13/08/08
14495
Ой, да ещё в Дюне бывалоча ткнёшь трайку идти на разведку в чОрный угол, он и побежит, шустренько объезжая все горы и овраги.
Так что ответ - алгоритмы есть.
тут вопрос такой - известна ли карта объезжанту или нет. В большинстве игр известна, поэтому он заранее намечает маршрут. Вернее, не он, а высший компьютерный разум.
Если же ему карта как бы неизвестна, то это уже совсем другой алгоритм.

Если надо просто проложить маршрут по известной карте без минимизации параметров пути, то это задача для графов (не графьёв!) - найти путь между двумя вершинами. В сложных лабиринтах не так просто. Чтобы превратить карту в граф надо раздуть все многоугольники. Хотя у Вас они выпуклые и непересекающиеся, так что лабиринт отменяется. Тогда метод сползающей капли.В крайнем случае - по сторонам квадрата.

Если же мы сидим в танке, то тут тоже надо доопределить, можем ли мы рисовать свою карту, можем ли определять координаты положения, либо расставлять метки, запоминать местность.
Если есть хотя бы компас, то та же самая капля. При натыке на препятствие, выбираем одно из двух направлений. Но работает именно для выпуклых непересекающихся дырок.

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

 Профиль  
                  
 
 Re: Путь через квадрат
Сообщение08.10.2010, 13:34 
Заслуженный участник
Аватара пользователя


23/08/07
5500
Нов-ск
Gortaur в сообщении #360130 писал(а):
- направление любое - хоть по диагонали;
Ну так и идите по диагонали.

 Профиль  
                  
 
 Re: Путь через квадрат
Сообщение08.10.2010, 21:30 


02/07/08
322
Вы бы желаемую сложность озвучили. А то можно же просто сделать: доказать, что оптимальный путь проходит по вершинам многоугольников, после чего найти его за O(N^2), где N - суммарное число вершин, алгоритмом Дейкстры.

 Профиль  
                  
 
 Re: Путь через квадрат
Сообщение08.10.2010, 22:28 


26/12/08
1813
Лейден
Cave
спасибо, интересно. Сложность такая должна подойти. Как доказать, что оптимальный путь проходит по вершинам, не посоветуете? И в чем его оптимальность?))

 Профиль  
                  
 
 Re: Путь через квадрат
Сообщение09.10.2010, 05:49 
Заслуженный участник
Аватара пользователя


23/08/07
5500
Нов-ск
Gortaur в сообщении #360262 писал(а):
Cave
спасибо, интересно. Сложность такая должна подойти. Как доказать, что оптимальный путь проходит по вершинам, не посоветуете? И в чем его оптимальность?))
Никак не докажете. Если путь по диагонали открыт, то нет нужды посещать вершины.

 Профиль  
                  
 
 Re: Путь через квадрат
Сообщение09.10.2010, 07:10 
Заслуженный участник


26/07/09
1559
Алматы
2Gortaur
Цитата:
И в чем его оптимальность?))

Наикратчайшесть? :)

P.S.: Вбейте в поисковик что-то вроде "алгоритмы обхода препятствий".

 Профиль  
                  
 
 Re: Путь через квадрат
Сообщение09.10.2010, 11:00 


02/07/08
322
TOTAL в сообщении #360283 писал(а):
Gortaur в сообщении #360262 писал(а):
Cave
спасибо, интересно. Сложность такая должна подойти. Как доказать, что оптимальный путь проходит по вершинам, не посоветуете? И в чем его оптимальность?))
Никак не докажете. Если путь по диагонали открыт, то нет нужды посещать вершины.


Я не счёл нужным писать, что помимо вершин многоугольников в путь должны входить левый нижний и правый верхний углы.

Оптимальность в длине. Доказать, думаю, можно примерно так: рассмотрим кратчайший путь (доказывать, что такой существует, не будем), он является ломаной по условию. Если её звенья проходят через вершины многоугольников, то добавим их все также к ломаной без увеличения длины пути. Теперь ломаная пересекается с многоугольниками только в своих вершинах - отрезки звеньев между её вершинами не имеют больше общих точек с многоугольниками.
Если в ломаной всего 2 вершины, то это диагональ, и доказывать нечего. Пусть их не меньше 3. Рассмотрим любые 3 подряд идущие вершины ломаной и среднюю из них. Если она не принадлежит многоугольнику, то, так как объединение многоугольников замкнуто, звенья можно пошевелить, не образовывая новых пересечений: подвинем среднюю точку к любой из крайних - от этого длина уменьшится. Если она она лежит на ребре многоугольника и не является ничьей вершиной, то можно провести аналогичные рассуждения и подвинуть её либо по ребру, на котором она находится, либо "отодвинуть" от ребра - тоже с уменьшением длины.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group