首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在CCW或CW方向对多边形的顶点进行排序

在CCW或CW方向对多边形的顶点进行排序
EN

Stack Overflow用户
提问于 2012-10-29 08:09:56
回答 2查看 4.6K关注 0票数 1

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

你知道如何实现这一点吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-29 08:23:23

我认为这本质上是Königsberg Bridge问题的简化版本。

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

如果有>2条边连接在一个节点上的情况,...嗯,我想可能会有不止一个订单。只需参考Königsberg Bridge问题的解决方案。

代码语言:javascript
复制
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)
票数 3
EN

Stack Overflow用户

发布于 2012-10-29 08:30:40

我假设CW/CCW方向无关紧要(保证其中之一要复杂得多)。此伪码算法对CW或CCW顶点进行排序。

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13114378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档