Показать сообщение отдельно
  #5 (permalink)  
Старый 12.08.2015, 16:52
Аватар для Paguo-86PK
Профессор
Отправить личное сообщение для Paguo-86PK Посмотреть профиль Найти все сообщения от Paguo-86PK
 
Регистрация: 16.09.2009
Сообщений: 253

Сообщение от nerv_ Посмотреть сообщение
ответ на этот вопрос в первом предложении моего предыдущего поста
Хм. Извиняюсь.
Я привык работать с растровыми изображениями (типа используя mmx/sse на ассемблере фильтровать кадры), а вот векторные алгоритмы - тёмное дело. Вот что выдаёт мой скрипт в окне FireFox. Некоторые линии прорисовываются дважды.

Алгоритм: Нахожу первую чёрную точку.
  1. Используя Math sin/cos по всему радиусу определяю максимально длинную линию, запоминая её координаты
  2. Разбиваю всю линию на массив отдельных точек и, как в пункте 1, по всему радиусу ищу максимум
Как видите, алгоритм до тупого прост. И, как правило, это его проблема, так как он один путь проходит несколько раз. Из массива линии потом удалять нельзя, надо удалять в самом процессе. Что сложно для меня и я не понимаю эту часть.

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

В идеале (в бинарном массиве) формируется таблица декодирования (в матрице жук её формирует):
  • ESWN (EAST + SOUTH + WEST + NORTH) (UpperCase - путь имеет повороты) - старт-кольцо
  • wsn или wns (west + south + north или west + south + north) (LowerCase - путь имеет тупики) - фигурка ├ тетриса
  • WN (WEST + NORTH) - фигурка └ тетриса
  • N (NORTH) - фигурка │ тетриса
  • WS - фигурка ┌
  • NWS
  • sw
  • SE
  • en
  • SEN
В итоге получается "├└│┌⊓┤└┴⊔" в массиве 14x10.
Изображения:
Тип файла: jpg tracer.jpg (22.7 Кб, 5 просмотров)

Последний раз редактировалось Paguo-86PK, 12.08.2015 в 18:56.
Ответить с цитированием