C ++将线段数组排序为CW或CCW顺序

时间:2013-08-14 02:01:48

标签: c++ sorting geometry

我正在研究一种算法,用于将STL文件切片为每个切片的单独SVG文件。我是一个点,我有一个线段数组,将在每个切片中组成一个或多个多边形(如果STL模型中有一个洞,将有几个构成轮廓的多边形),我需要一个将这些段分类为

的方法
  1. CW或CCW订单(并在必要时重新定向)
  2. 为起始数组中的每个多边形分别设置数组。
  3. 假设这些段在数组中是随机顺序和随机方向。每个多边形中的所有线段都会对齐,但我希望它们也是从头到尾排列的,所以有些线段可能需要翻转它们的顶点

    顶点结构只是xyz坐标。 我实际上并不关心段是CW还是CCW,只要它们是有序的。

1 个答案:

答案 0 :(得分:3)

您没有向我们展示任何代码,因此我将编写伪代码:

while there are still loose segments
  take a loose segment and put it in a new polygon
  while the tail vertex of the polygon doesn't match its head vertex
    iterate over the remaining loose segments
      if the head of the segment matches the tail of the polygon
        append it to the polygon
        break out of the iteration
      reverse the segment
      if the head of the segment matches the tail of the polygon
        append it to the polygon
        break out of the iteration
    if control reaches here, the segments don't form a polygon -- ERROR!
  the polygon is complete, add it to the collection