我有一组定义多边形的边和顶点(不一定是凸的)。顶点和边是随机顺序的,我想按顺时针(或逆时针)方向对该多边形的顶点进行排序/排序。
知道如何实现吗?
我认为这本质上是柯尼斯堡桥问题的简化版本。
如果没有任何情况下在单个节点上连接了两个以上的边,则可以构建一个相邻列表并“遍历”所有节点。
如果有> 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)
我假设 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