Сортировка вершин после пересечения трехмерной изоповерхности с плоскостью - PullRequest
1 голос
/ 08 июля 2011

Вот еще одна геометрическая проблема:

Я создал трехмерную триангулированную изоповерхность облака точек, используя алгоритм движущихся кубов. Затем я пересекаю эту изоповерхность с плоскостью и получаю ряд отрезков, которые представляют контурные линии пересечения.

Есть ли возможность отсортировать вершины этих отрезков по часовой стрелке, чтобы я мог нарисовать их как замкнутый путь и выполнить заливку?

Заранее спасибо!

1 Ответ

0 голосов
/ 14 июля 2011

Это зависит от того, насколько сложна ваша изоповерхность, но простейшая вещь, которую я могу придумать, может сработать:

  • Для каждой точки проецируйте на плоскость.Это даст вам набор точек в 2d.
  • Убедитесь, что они отцентрированы, путем перевода в центроид или центр ограничительной рамки.
  • Для каждой 2d точки выполните atan2 иполучить угол.atan2 просто помещает вещи в правильный квадрант.
  • Порядок по этому углу

Если ваша изоповерхность / плоскость монотонно увеличивается в угле вокруг центроида, то это будет работать нормально.Если нет, то вам может понадобиться найти 2 ближайших соседа к каждой точке на плоскости и надеяться, что это сделает простой цикл.На первый взгляд, идея простого цикла может быть проще, потому что вам не нужно проектировать и вам не нужно вычислять углы - просто делайте все в 3d.

...