2016-02-06 3 views
2

Я пытаюсь преобразовать многоугольную 3D-сетку в серию топографических кривых, представляющих часть сетки на определенной высоте для каждого интервала. До сих пор я придумал идею пересечения горизонтальной плоскости с сеткой и получить кривую пересечения. Так что для этой сетки: enter image description hereСоздание топографических 2D-кривых из многоугольной сетки

Я бы пересекаться самолет несколько раз на заданном интервале точности: enter image description here

enter image description here

enter image description here

и т.д.

enter image description here

Хотя это легко сделать визуально и в приложении САПР, я полностью потерял это программно. Как я мог бы вычислить это в среде программирования/какие алгоритмы я могу изучить для достижения этого?

Я программирую в среде STL C++ (с Boost), загружая ячейки .obj с this simple loader, и нуждаясь в простых декартовых 2D-точках для определения выходной кривой.

+0

в случае, если кому-то интересно, это для создания инструкций печати для 3D-принтера. – TheInnerParty

ответ

3

Опция состоит в том, чтобы обрабатывать все грани по очереди и для каждого лица определять горизонтальные плоскости, которые пересекают их. Для данной плоскости и лица проверьте поочередно все четыре вершины и найдите изменения знака (от Zvertex - Zplane). Будет ровно два таких изменения, определяющих ребро, принадлежащее кривой уровня. (Исключительно вы можете найти четыре изменения знака, которые возникают, когда грань не является плоской - присоединяйте точки попарно.)

Каждый раз, когда вы находите точку пересечения, вы помечаете ее уникальным индексом плоскость и (уникальный) индекс пересекаемого ребра; вы также помечаете его индексом другого края, который был пересечен на этом лице.

Посредством сортировки по индексу плоскости вы можете группировать пересечения на плоскость.

Для данной плоскости, используя хеш-таблицу, вы можете следовать цепочке пересечений, от края до края.

Это дает желаемый набор кривых.

+0

Блестящий, это имеет смысл. Как точно, как вы находите/что такое «изменения знака»? – TheInnerParty

+0

Проверьте признаки Zvertex-Zplane –

+0

, независимо от того, является ли он положительным или отрицательным? – TheInnerParty