0 голосов
 
864 просмотра
5.05.2018 / 19:53  Death

Получение точек из массива

Задача такая: получить с int[][] map список точек которые окружают данные id в этом массиве.
На рисунке я показал как примерно должно получиться. Мне нужно собрать точки по часовой стрелке вокруг фигуры, которую составляют 1.
Мой код
Открыть спойлер
с горем по полам как-то заработал. Но получилось так, что иногда и точки повторяются и получение нескольких фигур выходит так, что накладывается друг на друга.

:ps: Название и теги я не придумал как лучше назвать

Пример.png (39.43 кб.)
6.05.2018 / 02:50  Askalite
Начальная точка важна?
6.05.2018 / 07:30  Death
Нет. Главное получить фигуру, где начал, рядом и закончил, так как потом соединение первой и последней точки.
По часовой или против часовой - не важно.
Ответы
 
1 голос
 
# 6.05.2018 / 12:20  RblSb
Посмотри алгоритм окрестности Мура
https://en.wikipedia.org/wiki/Moore_neighborhood
Ну или вот описан алгоритм для аналогичной задачи
https://stackoverflow.com/a/15929691/4750888
В таком случае получить внешние точки фигуры легко, но с дырками внутри уже возникают проблемы. Можно отмечать все проверяемые тайлы, а после отскана основной фигуры (из единиц), сделать итерацию по нетронутым тайлам внутри нее, и проверить, есть ли там тайлы обратного цвета. Создать для них контур, и пойти по рекурсии при необходимости, или выйти на уровень выше с продолжением поиска следующих фигур.
6.05.2018 / 12:49  Death
Спасибо. Посмотрю, может смогу что-то сделать
 
0 голосов
 
# 8.05.2018 / 06:11  Askalite
Вот файл. В файле должна картинка window. Также там есть исходники, насколько я помню. В исходниках код Раба. Робот бегает, ищет границу, а когда найдёт, обходит.

https://annimon.com/forum/file20356/CudetTap.rar
Всего: 2

Реклама

Мы в соцсетях

tw tg yt gt