Хм. Извиняюсь.
Я привык работать с растровыми изображениями (типа используя mmx/sse на ассемблере фильтровать кадры), а вот векторные алгоритмы - тёмное дело. Вот что выдаёт мой скрипт в окне FireFox. Некоторые линии прорисовываются дважды.
Алгоритм: Нахожу первую чёрную точку.
- Используя Math sin/cos по всему радиусу определяю максимально длинную линию, запоминая её координаты
- Разбиваю всю линию на массив отдельных точек и, как в пункте 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.