我真的需要一些紧急帮助解决这个问题。
我有一组定义多边形的边和顶点(不一定是凸面)。顶点和边是随机顺序,我想以顺时针(或反时钟方向)方向对此多边形的顶点进行排序/排序。
请参阅此页面以获取更详细的说明:http://www.dixittech.com/blog/2012/10/28/sorting-vertices-of-a-polygon-in-ccw-or-cw-direction/
知道如何实现这一目标吗?
答案 0 :(得分:3)
我认为这本质上是KönigsbergBridge问题的简化版本。
如果没有任何情况下在一个节点上连接了两条以上的边,则可以构建一个相邻的列表并“遍历”所有节点。
如果在一个节点上连接了> 2条边的情况,...哼声我认为会有多个可能的顺序。请参考KönigsbergBridge问题的解决方案。
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)
答案 1 :(得分:0)
我假设CW / CCW方向无关紧要(保证一个或另一个更复杂)。这种伪代码算法将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