У меня есть набор перекрывающихся треугольников из 3D модели, спроектированной в 2D плоскость. Я должен объединить каждый остров касающихся треугольников в закрытый, невыпуклый полигон.
Результирующие полигоны не должны иметь никаких дыр в них (так как исходные данные не делают).
Многие из исходной доли треугольников (идентичная плавающая точка) края с другими треугольниками в исходных данных.
Что самый легкий путь состоит в том, чтобы сделать это? Производительность не особенно важна, так как это будет сделано во время проектирования.
Я также нашел этот [1] подход, который я буду пробовать в следующий раз.
[1] Алгоритм двухмерного контура для проецируемой трехмерной сетки
Представьте себе проекцию на плоскость как "вид" модели (т.е. направление проекции - это линия взгляда, а проекция - это то, что вы видеть). В этом случае границы многоугольников, которые вы хотите вычислить, соответствуют силуэту модели.
Силуэт, в свою очередь, представляет собой набор краев модели. Для каждого края в силуэте смежные грани будут иметь нормали, которые либо направлены от плоскости, либо к плоскости. Вы можете проверить это, взяв скалярное произведение нормали грани с нормалью плоскости - ищите ребра, у которых нормали смежных граней имеют скалярные произведения противоположных знаков с направлением проекции.
После того, как вы нашли все ребра силуэта, вы можете объединить их в границы желаемых многоугольников.
Как правило, вы можете найти больше об обнаружении и извлечении силуэтов с помощью поисковых запросов, таких как обнаружение силуэтов сетки
. Возможно, хорошее место для начала - здесь .