Алгоритмы, с которыми связан eed3si9n, будут генерировать хорошие разумные бумажные сетки из сложной геометрии. Если вы хотите развернуть сетку точно так, как она моделируется, например, для моделей многогранников, то здесь есть относительно простой способ развернуть любую сетку в ее нынешнем виде
Создайте граф из исходной сетки, где каждая грань является вершиной графа, и две вершины соединяются, если они имеют общее ребро в сетке. Один из этих графиков представляет неразборчивую сетку тогда и только тогда, когда у нее нет петель, то есть это дерево.
Хорошее дерево представляет наименьшее количество линий сгиба, чтобы добраться до самой дальней грани от начальной точки, поскольку каждый сгиб представляет ошибку, которая будет накапливаться в готовой модели. Алгоритм Дейкстры здесь хорош, но минимальное связующее дерево не работает. При одинаковом весе каждого ребра все деревья являются минимальными связующими деревьями, даже такими, которые разворачивают вашу сетку в одну большую спираль. Когда вы склеиваете модель, ошибки будут накапливаться до тех пор, пока последние несколько граней не уместятся совсем.
Как только у вас будет дерево, начните с начального лица. Затем пройдитесь по дереву и добавьте новые грани, рассчитав новую вершину как пересечение двух окружностей с радиусами, соответствующими длинам ребер в исходной сетке. Местоположения для вкладок соответствуют ребрам, которые были в исходной сетке, но не в дереве сглаживания.
Заданные пользователем срезы могут обрабатываться как удаление ребер до шага дерева.
Некоторые недостатки этой техники заключаются в том, что она с удовольствием создаст перекрывающиеся части в плоском шаблоне, и это зависит от нахождения хорошего начального лица. Я пытался начать с Флойд-Варшала, чтобы найти лицо минимального диаметра, но его поведение O (n ^ 3) было сделано для чрезмерно долгих перерывов на кофе. С перекрывающимися частями можно бороться, пометив эту ветвь дерева как «неполную», пропустив ее и снова запустив алгоритм на всех неполных гранях.