|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
15.05.2012, 19:07 | #1 |
Пользователь
Регистрация: 02.05.2011
Сообщений: 13
|
Обход препятствий (модель движения толпы к выходу)
Всем доброго времени суток. Уважаемы товарищи-программисты, столкнулся с проблемой при написании программы (модель движения толпы). Суть такова – поле, на котором все происходит, представляет собой сетку из клеток; одна единственная клетка – выход, другие либо пустые (белый цвет), либо там люди (зеленый цвет) или погибшие люди в результате паники (красный цвет), либо черный (препятствие). Так вот не могу довести до ума алгоритм движения людей к выходу при столкновении с препятствиями…. По идее надо, допустим, если перед человеком сверху (или снизу от него) в горизонтальную (либо вертикальную слева или справа от него) линию (т.е. несколько подряд клеток черного цвета в один ряд) – нужно чтобы он обходил эту стенку как полагается относительно выхода (т.е. также стремился достигнуть выхода), т.е. не долбился в нее (как у мя сейчас происходит, при этом он стопорится там и умирает как бы), а должно быть чтобы он вдоль стенки двигался пока не найдет свободную клетку для движения к выходу, т.е. вперед…. С боковыми, т.е. вертикальными препятствиями тоже так…. Вот не пойму как это дело соорудить… Вот схема, которую нарисовал как должно быть
|
15.05.2012, 19:30 | #2 |
Дружелюбный
Форумчанин
Регистрация: 23.02.2012
Сообщений: 692
|
Алгоритм нахождения кратчайшего пути "A*" вам в помощь. Расчитайте его для каждого человека.
-==ЛЮБОЕ ЗНАНИЕ ДОСТИГАЕТСЯ ТОЛЬКО СОБСТВЕННЫМИ УСИЛИЯМИ!!!==-
|
15.05.2012, 20:53 | #3 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,528
|
при выборе направления проверяй доступность пути(есть препятствие типа стена) и при его наличии корректруй направление.
программа — запись алгоритма на языке понятном транслятору
|
15.05.2012, 21:04 | #4 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
А* ищет не кратчайший путь, а лишь близкий к оптимальному. Зато намного экономичнее поиска кратчайшего пути. Поэтому, когда именно оптимальный путь не требуется (как в данном случае), целесообразно использовать именно А*.
|
15.05.2012, 21:11 | #5 |
Пользователь
Регистрация: 02.05.2011
Сообщений: 13
|
просто у меня еще одна сложность, ведб человек не один может быть (зеленая клетка). их несколько и они рандомно расположены. т.е. я координаты не могу знать. и получается придется еще проверять условие кроме наличия препятствия - нет ли там человека.... ну что-то в этом роде.... пока у мя получается, что препятствие и наличие человека в клетке, на которую хочет перейти человек - обрабатываются одинаково - т.е. если та клетка занята, то идем на другую какая свободна...
блин, что-то запутался сам( |
15.05.2012, 21:34 | #6 | |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
Это как?
Цитата:
1. Считать другого человека за препятствие как при поиске пути, так и при передвижении. 2. Считать за препятствие только для передвижения, путь строить без учета других людей. |
|
15.05.2012, 21:37 | #7 |
Пользователь
Регистрация: 02.05.2011
Сообщений: 13
|
ну в принципе объединить и людей и препятствие - тупо проверять, занята ли клетка (пуста или нет).... наверное так...
|
15.05.2012, 22:02 | #8 | |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
Цитата:
А если при поиске пути людей не учитывать, возникнет характерная давка на выходе. Кстати, есть и третий вариант: считать, что у клеток занятых людьми, существенно ниже коэффициент проходимости. Ну а если длина пути (с учетом людей) выше некоторого предела, человек впадает в панику и начинает метаться. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Моделирование паникующей толпы в замкнутом пространстве | mrandrew1990 | Общие вопросы Delphi | 9 | 15.05.2012 20:54 |
Счетчик элементов массива (для модели толпы) | mrandrew1990 | Общие вопросы Delphi | 6 | 05.03.2012 18:58 |
По выходу из потока не работают элементы скроллинга компонента dataGridView | zakaev | C# (си шарп) | 2 | 07.09.2011 08:11 |
Обход динамичных препятствий | CrHD | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 4 | 19.05.2009 23:10 |