Я тут кажись чего-то родил

Перебираем все объекты Point.
Уточнение: для каждого объекта P0, P1 и т.д. создан массив со всеми прилегающими сторонами. Сторона описана двумя векторами. На схеме обозначены синими стрелками. (Про вектор наглядно показано
здесь)
Из P0 движемся в следующую соседнюю вершину (P1), здесь встречаем свой массив векторов. Для поворота направо определяем вектор из этого массива с наименьшим углом к P0 P1. По нему движемся дальше до встречи с начальной точкой. Всё, первый спрайт создан (0 в красном кружке).
Смотрим следующую точку.
Точки, у которых перебрали все вектора исключаем из перебора.
Примерно так. Думал наткнуться на готовый алгоритм.
Извините за косноязычие, не могу доходчиво объяснять задачу.
