1

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

知道如何实现吗?

4

2 回答 2

3

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

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

如果有> 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)
于 2012-10-29T00:23:23.363 回答
0

我假设 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
于 2012-10-29T00:30:39.810 回答