遇到一个棘手的算法问题,多边形(可能凸也可能是凹)顶点的顺序问题

已婚奥特曼 2013-08-19 11:04:18
已知一个多边形所有顶点的坐标,这个图形的形状也有了
怎么来按照顺序输出这些坐标。
之前用了扫描法和固定一点求点到各顶点的角度,象限判断,但都存在一些漏洞。特此求问,要奔溃了。。。
...全文
534 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
卧_槽 2013-08-20
  • 打赏
  • 举报
回复
你这道数学题本身就无解的,怎么可能会写的出程序呢? 已知多边形各顶点坐标,求多边形各边。 你不觉得无论怎么求,都会求出N个多边形来么?谁知道哪个是你要的?
lcf 2013-08-20
  • 打赏
  • 举报
回复
看我的解释没
已婚奥特曼 2013-08-20
  • 打赏
  • 举报
回复
引用 12 楼 lishikai500 的回复:
嗯,把点分为两种,一种是原始点,也就是三角形的顶点,一种是交叉点, 针对每个交叉点生成一个小树,也就是两个原点为父,交叉点为子,没有交叉点的就两个原点成一个树 然后就得到很多树放到set里, 之后拿出一个树做基本的graph,找set里有相同顶点的树,添加进图,然后拿第二个树的不重复点去set里找相同 直到set里的树都被拿出来。就成一个完整的图了。
刚才又仔细研究了下,好像走不通了。 确定交叉点时,知道的只有两条线段及4个点的坐标,不知道这两条线段与其他线段的情况,因此无法判断出交叉点的父点。
t1212112 2013-08-20
  • 打赏
  • 举报
回复
不懂图形算法啥的,不过个人理解可以先随机选一个顶点,然后随机选一边,直线到点1,然后看点1连出多少线,选取线上只有1个点切不与其它线重合的那条线到点2,然后重复重复再重复,估计就能顺序遍历出来了。
已婚奥特曼 2013-08-20
  • 打赏
  • 举报
回复
引用 15 楼 lishikai500 的回复:
那试试以父点为主导,一个父点带两个交点,或者一个父点带一个交点和另一个父点 交点去离这个父点最近的交点,这样就不会取到另一条线了
嗯,跟我思路差不多,我是比对交点到顶点绝对值的距离,取较小点,这样走下去,估计后面还会遇到一些问题。 凹多边形的顶点排序好像网上讨论的很少。
lishikai500 2013-08-20
  • 打赏
  • 举报
回复
那试试以父点为主导,一个父点带两个交点,或者一个父点带一个交点和另一个父点 交点去离这个父点最近的交点,这样就不会取到另一条线了
wangyongc 2013-08-20
  • 打赏
  • 举报
回复
知道所有顶点的坐标,如果是凸的,好办。 有凹下的部分的话,则可能组成的图形是不确定的。 如果是两个凸多边形相交,则可以求出交点来判断,是可以的
lishikai500 2013-08-19
  • 打赏
  • 举报
回复
嗯,把点分为两种,一种是原始点,也就是三角形的顶点,一种是交叉点, 针对每个交叉点生成一个小树,也就是两个原点为父,交叉点为子,没有交叉点的就两个原点成一个树 然后就得到很多树放到set里, 之后拿出一个树做基本的graph,找set里有相同顶点的树,添加进图,然后拿第二个树的不重复点去set里找相同 直到set里的树都被拿出来。就成一个完整的图了。
lishikai500 2013-08-19
  • 打赏
  • 举报
回复
嗯,这的确纠结,确实能分出很多情况
lcf 2013-08-19
  • 打赏
  • 举报
回复
这问题没那么复杂。你随便取一个三角形,然后沿着一边寻找交点,如果没有交点就拐向另一边,如果有交点就向三角形外拐,拐到另一个三角形上,同样用这个方法,这样走一圈顺序就出来了。向外向里拐可以用向量相乘判定。
已婚奥特曼 2013-08-19
  • 打赏
  • 举报
回复
引用 5 楼 lishikai500 的回复:
有个固定的算法可以解决
这可以看为一个convex hull 问题
用Graham-­‐Scan 来求,记录下顶点顺序就好了。


比如说这个图,用凸包算法解不了吧,凹点无法扫描出来。
这个排序真难到我了。。。。
已婚奥特曼 2013-08-19
  • 打赏
  • 举报
回复
引用 5 楼 lishikai500 的回复:
有个固定的算法可以解决 这可以看为一个convex hull 问题 用Graham-­‐Scan 来求,记录下顶点顺序就好了。
随机点6个点,前3个和后3个各组成一个三角形,两个三角形有重叠部分。 依次列出这个新图形所有的顶点坐标。 这是题目,可能会出现凹点,所以用凸包解决不了
已婚奥特曼 2013-08-19
  • 打赏
  • 举报
回复
引用 4 楼 lcf 的回复:
因为如果只是一堆点,而且可以凹凸,这个定义是有歧义的。5个点: A B C D E 你可以把AC CB连起来,也可以把CD CE连起来。所以不知道你是怎样在没有顺序的情况下画出图形的
随机点6个点,前3个和后3个各组成一个三角形,两个三角形有重叠部分。 依次列出这个新图形所有的顶点坐标。 这是题目
lishikai500 2013-08-19
  • 打赏
  • 举报
回复
或者既然你有了所有顶点 先找到最左和最右的点,在这两点画一条虚拟的线,所有点在这条线之上的为A组,其他B组 把A,B按X坐标分别排序, 然后从最左开始添加A组的点(小从小到大),直到最右,然后在从最右开始添加B组的点(X从大到小)。 这样就得到一个整多边形。
lishikai500 2013-08-19
  • 打赏
  • 举报
回复
有个固定的算法可以解决 这可以看为一个convex hull 问题 用Graham-­‐Scan 来求,记录下顶点顺序就好了。
已婚奥特曼 2013-08-19
  • 打赏
  • 举报
回复
引用 12 楼 lishikai500 的回复:
嗯,把点分为两种,一种是原始点,也就是三角形的顶点,一种是交叉点, 针对每个交叉点生成一个小树,也就是两个原点为父,交叉点为子,没有交叉点的就两个原点成一个树 然后就得到很多树放到set里, 之后拿出一个树做基本的graph,找set里有相同顶点的树,添加进图,然后拿第二个树的不重复点去set里找相同 直到set里的树都被拿出来。就成一个完整的图了。
哥们的思路很靠谱。我按照你的思路解了下,遇到了新问题。。。这题太刁了 确定交点使用两条线段共4个点,此时无法确定交点的父点,后面也就无法排序了。。。 我还在想办法
lcf 2013-08-19
  • 打赏
  • 举报
回复
因为如果只是一堆点,而且可以凹凸,这个定义是有歧义的。5个点: A B C D E 你可以把AC CB连起来,也可以把CD CE连起来。所以不知道你是怎样在没有顺序的情况下画出图形的
lcf 2013-08-19
  • 打赏
  • 举报
回复
呃,你是怎么显示这个图形的。。
已婚奥特曼 2013-08-19
  • 打赏
  • 举报
回复
引用 1 楼 lcf 的回复:
一堆顶点的意思是。。乱序的顶点?这形状是怎么描述的?
是两个图形有重叠部分,组成了新的图形。 现在这个图形所有的顶点坐标已经获取,图形在电脑上有显示,问题就是如何依次排列。
lcf 2013-08-19
  • 打赏
  • 举报
回复
一堆顶点的意思是。。乱序的顶点?这形状是怎么描述的?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧