外接多边形问题

Mr_Ldh 2005-10-21 03:17:25
已知一些直线及一个点,怎样得到包围这个点的多边形。要求这个多边形是由已知的这些直接组成的。
...全文
265 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
Gold2000 2005-10-25
  • 打赏
  • 举报
回复
噢,你是在做CAD的二次开发?!
Gold2000 2005-10-24
  • 打赏
  • 举报
回复

搂主, 你到底在做什么???
Gold2000 2005-10-24
  • 打赏
  • 举报
回复
我以前做过跟你这个问题相似的算法,我总觉得有点“笨”!

I_Love_CPP(Climb,Never Stop!) 是不是有些好建议???

Gold2000 2005-10-24
  • 打赏
  • 举报
回复
“回”里面还包含“回”字 其实也没所谓,大不了你就找到n个多边形,
你用不同的Canvas颜色画Polypolygon()不就OK了!
Mr_Ldh 2005-10-24
  • 打赏
  • 举报
回复
To Gold2000(Gold2000): 我在做的是对CAD图填色。
Mr_Ldh 2005-10-23
  • 打赏
  • 举报
回复
考虑到我上面提到的“复杂”情况,经过算法第2步,得到一个多边形列表后,在第3步中就不能只是简单地判断点是否在某个多边形内了。当判断出点在某个多边形内部后,是不是还需要进一步判断还有没有其它多边形也完全包含在这个多边形内?最后这个多边形要用Polypolygon()画出了。
Mr_Ldh 2005-10-23
  • 打赏
  • 举报
回复
Gold2000(Gold2000): 你的算法是假设“直线”的情况下的,如果换成“线段”,除了需要判断点是否在凹多边形内以外,其它还有什么改变吗?
  另外,你说“实现这个算法时,中间还需要特别注意一些问题”。不妨也说出来吧。
Mr_Ldh 2005-10-23
  • 打赏
  • 举报
回复
判断点是否在凹多边形内还是有办法的,正如你所说,射线有4个方向可换。实在不行,不一定非要用水平或垂直的射线。总之可以先不考虑这个问题。
是啊,分数不重要,互相学习才是根本。但在这里我也只能这样表示了。^-^
Gold2000 2005-10-23
  • 打赏
  • 举报
回复
哈哈,我不太需要你这个分!互相学习一下而已

我也是最近才来到你们这个板块,你们这里研究算法的人多,
特别是OpenGL高手多,happy__888([顾问团]寻开心)帮了我不少的忙,
十分感谢!
Gold2000 2005-10-23
  • 打赏
  • 举报
回复
在我看来,

判断点是否在 多边形内,这个多边形最好是凸多边形!!!

如果是凹多边形,且如果射线与凹多边形 的所有交点 都不位于
凹多边形的任何顶点处,仍然有效的根据点数的奇偶来作出判断。

当然,如果存在 射线与凹多边形 的交点 位于
凹多边形的顶点处,也可以换一换射线的方向进行判断;
射线有4个方向可换,只要凹多边形不是特别特别的不巧,还是能找到答案的!


你同意吗?
Mr_Ldh 2005-10-23
  • 打赏
  • 举报
回复
先加100分再说,呵呵。
Mr_Ldh 2005-10-23
  • 打赏
  • 举报
回复
首先感谢Gold2000(Gold2000)及happy__888([顾问团]寻开心)的热心帮助。其实我要解决的是一个在二维平面上进行填充的问题,但不能用扫描线法直接填充,必须取得要填充的多边形。因为我还要缩放、要保存这个多边形。首先这个平面有一个矩形范围(就是屏幕范围,鼠标点一定在这个范围之内),这些线段是任意的,可能完全位于屏幕内(或屏幕外,可不考虑),也可能与屏幕矩形相交。注意是“线段”,所以产生的最终结果有可能是凹多边形,也有可能是“回”字型,甚至更复杂的情况,这些线段在矩形范围内部围成了若干个“口”字形,鼠标点位于“口”外部,最终结果要取得“口”外面、屏幕矩形内部的形状。不知我的表述是否清楚?
  感觉Gold2000(Gold2000)描述的算法差不多,请继续...
Mr_Ldh 2005-10-23
  • 打赏
  • 举报
回复
To I_Love_CPP(Climb,Never Stop!) :什么叫"点仅仅在其一侧"?
Mr_Ldh 2005-10-23
  • 打赏
  • 举报
回复
To Gold2000(Gold2000): 如果考虑这些线都是线段,就可能会出现“回”字形的情况,这时通过第2步得到的多边形就不一定相互独立、互不包含了。
I_Love_CPP 2005-10-23
  • 打赏
  • 举报
回复
有点问题,修正一下:

遍历直线,
保留那些满足条件"点仅仅在其一侧"的直线,
判断这些直线是否构成封闭区域,
若是而且区域内有点,成功;
否则继续遍历.
I_Love_CPP 2005-10-23
  • 打赏
  • 举报
回复
引用
已知一些直线及一个点,怎样得到包围这个点的多边形。要求这个多边形是由已知的这些直接组成的。


遍历直线,
保留那些满足条件"点仅仅在其一侧"的直线,
判断这些直线是否构成封闭区域,
若是,成功;
否则继续遍历.
Gold2000 2005-10-23
  • 打赏
  • 举报
回复
1、我的意思是: 多边形列表中所有的多边形都是相互独立的、都不会相互包含!

2、“实现这个算法时,中间还需要特别注意一些问题”:
线段列表中任取一线段 P1P2,如果找到多条以P2为端点的线段,
例如有P2P3、P2P4、P2P5,“应该先把位于线段 P1P2左边的线段过滤掉”,
剩下的是位于线段 P1P2右边的,然后才两两比较这些线段,
找到最左边的一条线段;如果所有的线段都是位于线段 P1P2左边,应该
两两比较这些线段,找到最右边的一条线段。

这样,才能保证你找出来的多边形是 相互独立的、都不会相互包含!
Gold2000 2005-10-22
  • 打赏
  • 举报
回复
赫赫,是啊,搂主真是惜墨如金!

一点都不像我这么“罗嗦”
寻开心 2005-10-22
  • 打赏
  • 举报
回复
对于这个变形后的‘口’字来说,它是有6个顶点,6个线段

最上边的‘一’是三段‘一’组成的,中间的‘一’不是原始的8个线段之一,它的两个端点,属于原始的8个线段当中的两个线段的,各自的一个端点。

我是觉得楼主的问题描述的不清晰
在我的理解看来楼主是想把一个一个线段用直线相连组成一个多边形,包含这个特殊点进去。最终的多边形的顶点必须是来自已知线段的顶点,而且多边形的边要么是线段,要么是构成多边形的边的不同线段的端点。
那种一个顶点在多边形上,另外一个顶点不在多边形上的线段不能算。
寻开心 2005-10-22
  • 打赏
  • 举报
回复
对于直线来说,多个直线交出来的是凸的多边形没错
但是对于线段不一样,比如这个‘凹’字本生,可以认为是8个线段组成的

假设给你的就是‘凹’这个字的8个线段,以及位于凹字中间豁口部分的一个点,如何把这个点包含进去呢?
只有把‘凹’字变成‘口’字才可以的呀。


加载更多回复(12)

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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