【问题标题】:Sorting vertices of a polygon in CCW or CW direction在 CCW 或 CW 方向上对多边形的顶点进行排序
【发布时间】:2012-10-29 00:09:55
【问题描述】:

我有一组定义多边形的边和顶点(不一定是凸的)。顶点和边是随机顺序的,我想按顺时针(或逆时针)方向对该多边形的顶点进行排序/排序。

知道如何实现吗?

【问题讨论】:

    标签: sorting polygon ccw


    【解决方案1】:

    我认为这本质上是柯尼斯堡桥问题的简化版本。

    如果没有任何情况下两个以上的边连接在一个节点上,您可以构建一个相邻列表并“遍历”所有节点。

    如果有 >2 条边在一个节点处连接的情况,...嗯,我认为可能的顺序不止一个。只需参考柯尼斯堡桥问题的解决方案即可。

    for v,u in edges:
      adjacent[v].append(u)
      adjacent[u].append(v)
    
    order=[]
    
    start = v0 #start from an arbitrary node
    
    def draw(now,last):
      if now==start and len(order)>0:
        return
      order.append(now)
      for i in adjacent[now]:
        if i != last:
          draw(i,now)
    
    draw(start,NULL)
    

    【讨论】:

      【解决方案2】:

      我假设 CW/CCW 方向无关紧要(保证一个或另一个要复杂得多)。这种伪代码算法对顶点进行顺时针或逆时针排序。

      marked_edge <- any edge
      first <- marked_edge.start
      list <- [first]
      current <- marked_edge.end
      while current <> first
          list <- list + [current]
          new_edge <- find the edge that is not the marked_edge and has the vertex current as either start or end
          if new_edge.start=current then
              current <- new_edge.end
          else
              current <- new_edge.start
         endif
         marked_edge <- new_edge
      endwhile
      

      【讨论】:

        猜你喜欢
        • 2014-05-23
        • 2011-11-14
        • 1970-01-01
        • 2015-10-04
        • 2012-12-17
        • 2011-07-28
        • 2015-04-07
        • 1970-01-01
        • 2012-12-05
        相关资源
        最近更新 更多