Следующая проблема в 2D, поэтому при предложении ответов могут быть сделаны некоторые упрощения.
Мне нужно создать замкнутые области (определяемые либо отрезками линий, либо просто набором точек - выпуклым многоугольником) из набора точек / отрезков.
В основном я использовал Вороного для создания "дорог". Затем я изменил некоторые данные. Теперь мне нужен способ перебрать эти данные (которые все еще являются отрезками, но больше не соответствуют Вороному) и генерировать «окрестности», граничащие с «дорогами».
Я посмотрел на некоторые графовые диаграммы и теории кратчайших путей, но не смог понять это.
Логически это можно сделать, начиная с левого края из одной точки, находя путь назад к этой точке, используя кратчайший путь с доступными линиями (используя только направления по часовой стрелке). Затем отметьте эту строку и удалите из данных. Затем вы можете повторить тот же процесс и получить все области, подобные этой.
Я пытался реализовать это, но это ни к чему не привело, так как я не мог найти способ написать код на C ++, который мог бы это сделать. Проблема заключалась в выборе линии против часовой стрелки из доступных линий из определенной точки. Вся математика, основанная на углах, я давала неправильные ответы, потому что способ sin / cos реализован в c ++.
Итак, подведем итог - если вы можете помочь мне с совершенно новым подходом к проблеме, то это хорошо, если нет, вы не могли бы помочь мне найти способ написать часть кода, которая находит кратчайший путь по часовой стрелке к начальной точке используя отрезок линии, заданный в качестве пути назад.
РЕДАКТИРОВАТЬ: Добавлено изображение, чтобы проиллюстрировать, что я хочу сделать.
Проверьте изображение здесь - (нужно 10 репутаций, прежде чем я смогу опубликовать его здесь: P)
У меня есть набор точек (фиолетовые маленькие точки). Другой массив определяет, какие точки составляют линию (дорогу). Мне нужен способ определить область, окруженную дорогами, чтобы я мог помещать здания или более мелкие дороги внутри нее и проверять границы, чтобы каждая область была отделена. Надеюсь, что это даст вам больше информации о том, как решить эту проблему.
Спасибо за помощь!