Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Общие вопросы о Flash (не затрагивающие ActionScript)

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 14.09.2006, 16:17
Ноябрь вне форума Посмотреть профиль Отправить личное сообщение для Ноябрь Посетить домашнюю страницу Ноябрь Найти все сообщения от Ноябрь
  № 11  
Ответить с цитированием
Ноябрь
 
Аватар для Ноябрь

Регистрация: Jul 2005
Сообщений: 304
Отправить сообщение для Ноябрь с помощью ICQ
волновой алгоритм и A* это одно и то же?
__________________
Пора бы мне уже умнеть..

Старый 14.09.2006, 17:11
Хемуль вне форума Посмотреть профиль Отправить личное сообщение для Хемуль Найти все сообщения от Хемуль
  № 12  
Ответить с цитированием
Хемуль
Квач
 
Аватар для Хемуль

Регистрация: Sep 2006
Адрес: Украина, Киев
Сообщений: 1,526
Вот хороший сайт:
http://www.gotoandplay.it
Там есть много полезных статей. В том числе и по алгоритмам поиска пути. Воспользуйтесь поиском.

Старый 14.09.2006, 18:12
gl0om вне форума Посмотреть профиль Отправить личное сообщение для gl0om Посетить домашнюю страницу gl0om Найти все сообщения от gl0om
  № 13  
Ответить с цитированием
gl0om
[1.11 22.02.2006]

Регистрация: Apr 2004
Адрес: Moscow city
Сообщений: 99
Отправить сообщение для gl0om с помощью ICQ
я обычно ищу кротчайший путь так:

пробегаемся по массиву карты (если у тебя канечно он есть - если нету, то ничего не машает его построить ), ищем положение движущегося предмета. ЗАписываем в эту ячейку 0. Далее вокруг этого нолика в соседлинх ячейках пишем 1 - если там есть проход.

получается типа
-1-
101
-1-

далее
--2--
-212-
21012
-212-
--2--
в итоге доходим до пунктаназначения.
Далее строим обратный путь от конечной циферки до 0, запоминаем ключи элементов пути.. и уже потом ведем объект по ключам массива до нужной точки.

единственное возможное НО.. тут удобнее всего использовать рекурсию, не знаю есть ли такая возможность в AS

алгоритм сраведлив правда для 4х угольных клеток с одинаковой значимостью прохождения.. но можно и под 6тигранники его заточить
__________________
я всегда имею ввиду только то, что имею


Последний раз редактировалось gl0om; 14.09.2006 в 18:16.
Старый 14.09.2006, 21:07
BigDan вне форума Посмотреть профиль Отправить личное сообщение для BigDan Найти все сообщения от BigDan
  № 14  
Ответить с цитированием
BigDan
 
Аватар для BigDan

Регистрация: Apr 2006
Адрес: Kiev
Сообщений: 1,675
Отправить сообщение для BigDan с помощью ICQ
Этот вопрос я смотрю стал очень актуальным:
http://flasher.ru/forum/showthread.p...E8%F2%EC%EE%E2

Старый 14.09.2006, 23:40
Ноябрь вне форума Посмотреть профиль Отправить личное сообщение для Ноябрь Посетить домашнюю страницу Ноябрь Найти все сообщения от Ноябрь
  № 15  
Ответить с цитированием
Ноябрь
 
Аватар для Ноябрь

Регистрация: Jul 2005
Сообщений: 304
Отправить сообщение для Ноябрь с помощью ICQ
2gl0om
на предыдущей странице я писал об этом алгоритме
хороший, но все же для больших карт он не приемлим наверно.., я придумал лучше
__________________
Пора бы мне уже умнеть..

Старый 15.09.2006, 11:33
Ноябрь вне форума Посмотреть профиль Отправить личное сообщение для Ноябрь Посетить домашнюю страницу Ноябрь Найти все сообщения от Ноябрь
  № 16  
Ответить с цитированием
Ноябрь
 
Аватар для Ноябрь

Регистрация: Jul 2005
Сообщений: 304
Отправить сообщение для Ноябрь с помощью ICQ
хотя наверно не лучше, заключался он в том чтобы идти как будто препятствий нет, где полученная траектория пересекается с ними, определять контур и по наименьшей из дуг обходить.
+ не надо проверять при каждом шаге весь массив карты, а лишь один раз и только начальную траектории.
+ этот метод подойдет не только для шахматного поля, но и для простой карты, где будут функции-раектории, работающие по тому же алгоритму.
- я не уверен что это расстояние кратчайшее, точнее оно не кратчайшее, если препятствия обходить точно по контуру, а если контур будет простым, и в нем не будет лишних впадин (если убрать лишние впадины), то наверно кратчайшее..

еще я подумал что вовсе не обязательно просматривать всю карту при волновом алгоритме, при первом шаге достаточно проверить 9 клеток, на втором 25 и т.д, если подумать возможно еще удасться снизить площадь проверки массива.

пс
я прямо исследование провожу)
ппс
как копировать массив?
__________________
Пора бы мне уже умнеть..


Последний раз редактировалось Ноябрь; 15.09.2006 в 11:55.
Старый 15.09.2006, 12:22
gl0om вне форума Посмотреть профиль Отправить личное сообщение для gl0om Посетить домашнюю страницу gl0om Найти все сообщения от gl0om
  № 17  
Ответить с цитированием
gl0om
[1.11 22.02.2006]

Регистрация: Apr 2004
Адрес: Moscow city
Сообщений: 99
Отправить сообщение для gl0om с помощью ICQ
Цитата:
Сообщение от Ноябрь
хотя наверно не лучше, заключался он в том чтобы идти как будто препятствий нет, где полученная траектория пересекается с ними, определять контур и по наименьшей из дуг обходить.
+ не надо проверять при каждом шаге весь массив карты, а лишь один раз и только начальную траектории.
+ этот метод подойдет не только для шахматного поля, но и для простой карты, где будут функции-раектории, работающие по тому же алгоритму.
- я не уверен что это расстояние кратчайшее, точнее оно не кратчайшее, если препятствия обходить точно по контуру, а если контур будет простым, и в нем не будет лишних впадин (если убрать лишние впадины), то наверно кратчайшее..

еще я подумал что вовсе не обязательно просматривать всю карту при волновом алгоритме, при первом шаге достаточно проверить 9 клеток, на втором 25 и т.д, если подумать возможно еще удасться снизить площадь проверки массива.

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

массив копироавть можно везде по всякому..
примитивно можно копировать во вложенном цикле
Код:
int a[MAX_ELEMENTS][MAX_ELEMENTS1];
int new_a[MAX_ELEMENTS][MAX_ELEMENTS1];
for (i=0; i<MAX_ELEMENTS; i++){
 for (j=0; j<MAX_ELEMENTS1; j++){
  new_a[i][j]=a[i][j];
 }
}
а можно и так
Код:
memcpy(new_a, a, sizeof(a));
но это не про флеш будет сказано =)
__________________
я всегда имею ввиду только то, что имею


Последний раз редактировалось iNils; 15.09.2006 в 13:11.
Старый 15.09.2006, 13:07
Ноябрь вне форума Посмотреть профиль Отправить личное сообщение для Ноябрь Посетить домашнюю страницу Ноябрь Найти все сообщения от Ноябрь
  № 18  
Ответить с цитированием
Ноябрь
 
Аватар для Ноябрь

Регистрация: Jul 2005
Сообщений: 304
Отправить сообщение для Ноябрь с помощью ICQ
ну как это нету..
Код:
проверяем массив(карту), если какой-нибуть его элемент равен ноль,
окружающие его элементы приравниваем к одному(если только это не препятствие)
снова проверяем массив(карту), если какой-нибуть его элемент равен один,
окружающие его элементы приравниваем к двум(если только это не препятствие)
снова проверяем массив(карту), если какой-нибуть его элемент равен два,
окружающие его элементы приравниваем к трем(если только это не препятствие)
...:)
про копирование:
дело в том что флэш считает массив большим объемом данных и в случае
а=б где б массив, а получает только ссылку на него, и если изменить а, то изменится и б, как-то можно копировать, что б не менялся, помню случайно находил в книжке и форуме, а сейчас не могу..
у меня функция первоначальную карту меняет
__________________
Пора бы мне уже умнеть..


Последний раз редактировалось Ноябрь; 15.09.2006 в 13:10.
Старый 15.09.2006, 13:13
gl0om вне форума Посмотреть профиль Отправить личное сообщение для gl0om Посетить домашнюю страницу gl0om Найти все сообщения от gl0om
  № 19  
Ответить с цитированием
gl0om
[1.11 22.02.2006]

Регистрация: Apr 2004
Адрес: Moscow city
Сообщений: 99
Отправить сообщение для gl0om с помощью ICQ
ну чтоб ссылку не получить думается мне надо не просто некому "а" присвоить "б". Надо сказать что "а" это новый массив a = new Array() - помоему должно помоч
__________________
я всегда имею ввиду только то, что имею

Старый 15.09.2006, 13:16
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 20  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
Одномерный массив копируется с помощью метода concat
Код:
arrayA = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
arrayB = arrayA.concat ();
arrayA[0] = 100;
arrayB[0] = 500;
trace (arrayA);
trace (arrayB);
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Создать новую тему Ответ Часовой пояс GMT +4, время: 05:25.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 05:25.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.