![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Immortal |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 15.8.2003 Репутация: нет Всего: нет |
Конечно спасибо огромное за совет, но есть онда меленькая проблемка
Буду благодарен. |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Т.к. я не знаю структуру твоего массива, то сам подправишь:
Надо вызывать Enemy3. -------------------- С уважением, г-н Посол. |
|||
|
||||
| Immortal |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 15.8.2003 Репутация: нет Всего: нет |
p0s0l спасибо тебе за помощь, но он чёй-то говорит, что не знает, что такое _fld в функции Enemy3, если не трудно посмотри.
|
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Ага, там надо вместо mov esi, [_fld] поставить lea esi, [tmpArray]...
-------------------- С уважением, г-н Посол. |
|||
|
||||
| Immortal |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 15.8.2003 Репутация: нет Всего: нет |
asm'овская заливка в среднем на небольших захватах работает в 2-3 раза быстрее, это очень даже не плохие результаты, но последняя просьба
|
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Про стек - убери вообще эту константу (_stacksize). Это атавизм - нужен был для проверки больших площадей, чтобы не было stack overflow.
Для byte надо изменить начало Enemy3:
Мне интересно узнать: какую область ты заливаешь, например, в таком случае (точку поставят на место плюса): _ _ 2 2 2 _ _ _ (4 области) _ 2 _ _ _ 2 _ _ 2 _ 2 _ 2 _ 2 _ 2 _ _ + _ _ 2 _ 2 _ 2 _ 2 _ 2 _ _ 2 _ _ _ 2 _ _ _ _ 2 2 2 _ _ _ или в таком упрощенном варианте: _ 2 _ 2 _ (2 области) 2 _ + _ 2 _ 2 _ 2 _ И как ты находишь точку внутри захваченной области ? Ведь область может быть какой-нибудь извилистой ? Это сообщение отредактировал(а) p0s0l - 18.8.2003, 17:30 -------------------- С уважением, г-н Посол. |
|||
|
||||
| Immortal |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 15.8.2003 Репутация: нет Всего: нет |
В 1 примере я область не заливаю вообще так как она уже залита раньше, а во втором примере от этой точки по алгоритму А* я ищу все кротчайшие пути в эту же точку
Но есть интересная особенность путь продолжается искаться не до прохода в начальную точку, а до соприкосновения с другим путём например: 1 * * * * * * * * 1 * * * 4 * * * * 1 * 4 * 4 * * * * + * * * 3 * * 2 * 3 * 3 * * * 2 * * 3 * * * * * 2 3 * * * В данном случае + это начальная точка а цифры это пути: когда 3 встречается с 4, то считается, что 3-4 пстреча уже есть, в дальнейшем если 3 и 4 ещё встретятся это за замкнутость считаться не будет. Затем 2 встречается с 3 это происходит первый раз и поэтому русуется замкнутость. путь 1 не встечается не с кем и замкнутость не образует. И начсёт точки внутри. Т. к. я ищу только кротчайшие пути, то получается следующее. * * 2 2 2 * * * 2 * * * 2 * * 2 * * о 2 * * * 2 2 2 * * * * * * * * * Я нахожу из всего массива точек замкнутости две которые имеют наибольшую симму координат в данном случае это две нижних правых точки. И беру от них минимальный Х и минимальный Y и получаю координату точки о. * * 2 2 2 * * * 2 * * * 2 * * 2 * * о 2 * * * 2 2 2 2 * * * * * * * * единственный случай когда это не срабоет, но он невозможен, так как путь ищется самый короткий, а самая ижняя левая двойка будет добавлять одно лишнее звено. Если будут ещё вопросы спрашивай, мне будет даже интересно поделиться опытом |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Метод интересный, только это быстро работает ?
Если хочешь, то я тебе кину еще одну asm-функцию Enemy4 (люблю оптимизировать и ускорять Функция: 1) ищет и заливает незалитые замкнутые области автоматически (не надо давать точку внутри области) 2) возвращает кол-во новых залитых ячеек Т.е. так искать пути, области и точки внутри областей не нужно. Но если у тебя все работает быстро, то тогда лучше оставь как есть, т.к. эта функция работает медленнее: если Enemy3 у меня в среднем 0,1..0,5 мс, то Enemy4 - 1..2 мс... Особенно заметна разница на маленьких площадях, т.к. Enemy4 проверяет всё поле. Если чо, дак сообщи в PM. -------------------- С уважением, г-н Посол. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |