请教:判断一个简单多边形是否在另一个多边形之内的算法

goodsong 2002-05-21 10:18:23
只要实用就行,不要最好
...全文
818 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
goodsong 2002-06-02
  • 打赏
  • 举报
回复
谢谢各位,让我收获很多,已经过了10多天了,结贴吧
再一次感谢各位的参与和帮助!
zhj009 2002-06-01
  • 打赏
  • 举报
回复
UBf:
你的想法错了,若Polygon1为正五边形,而Polygon2为五角星,顶点重合,你的方法就错了,你的只适合凸多边形。
BUF 2002-05-31
  • 打赏
  • 举报
回复
窃以为:
首先,若 Polygon1 的每一个顶点都在 Polygon2 内,则 Polygon1 在 Polygon2 内。
这样问题转化为判断每个给定的点是否在多边形内。
若多边形是凸多边形,用面积法比较方便
若是一般的简单多边形,可以用射线法,或 360度极角累加的方法
zzwu 2002-05-30
  • 打赏
  • 举报
回复
GoodSong(如风):

1。n边形要判断边与边相交,这原则上如此。但实际问题中,如果有大量多边形要作包含性判别,则有可能一次求交都不作,就可排除大量多边形的相交可能性,这就是将多边形按它们的最小外接矩形的最大和最小值排序,这样,若某个多边形外接矩形的右边小于另一个的左边,就不会相交了,等。

1。zhj009(猪小弟) 所说的‘五角形’,确切点说就是‘五角星’(因通常五角形和五边形指同一种图形)。也就是把每个顶点,与它不相邻的顶点,相连,所形成的图形。

2。zhj009(猪小弟) 所讲的问题是存在的。也就是我前面贴中没有提到的一些特殊情况:一个多边形与另一个多边形之间虽然边不相交,但有相接触、相切,甚至完全相重的情况。如下面所画的几个例子那样,其中外框代表大的多边形B:

************** ************** ************** *************
* * * * * * * * * *
* * * * *********** * * * * *
* * A * * * * * * A * * *
* ********* * * A * * * * * A,B *
* * *********** * ************** * *
* * * * * * * *
************** ************** ************** *************
1.一点相切 2.一边相重 3.三边相重 4.四边相重

3。类似这样的一些情况,是否定义成为B包含A,可以考虑。实际问题中是否存在,也不一定。

4。若要考虑这些情况后的包含关系,则要把上面说的方法修改以下,但仍可以采用完全统一的方法,这就是:检查A的所有点,如果它们都在B内或者B上,说明B包含了A,否则不是。
zhj009 2002-05-30
  • 打赏
  • 举报
回复
不好意思,打错字了,
"如A为正五角形,B为正五边形,五角形的五个角与五边形的五个顶点重合。"
句中"五角形"应该是"五角星".
goodsong 2002-05-30
  • 打赏
  • 举报
回复
五角形是什么样子的阿
zhj009 2002-05-29
  • 打赏
  • 举报
回复
up
opengl3d 2002-05-29
  • 打赏
  • 举报
回复
可以用着色的方法吗
哈哈
zhj009 2002-05-29
  • 打赏
  • 举报
回复
上面方法忽略了一些情况:
如A为正五角形,B为正五边形,五角形的五个角与五边形的五个顶点重合。
要是A在B内,但A的一边与B的一边重合就没法判定了。
还有可能是A的一顶点在B的一边上,只有一个交点。

怎样判定A在B内。
我的算法:
1。找出所有内部无线段的子多边形。
2。给每个子多边形一逻辑值,包含在B内的为1,包含在A内的为0,A与B共有的取或。
3。找出是否有任一子多边形的值为0,如无,则A在B内。

可能实际写出来会很繁,期待更好的算法。

goodsong 2002-05-27
  • 打赏
  • 举报
回复
谢谢zzwu(未名)!
这样会不会很慢?对于n边形要判断边与边相交要求n*n次交点
zzwu 2002-05-26
  • 打赏
  • 举报
回复
判断一个多边形A是否在另一个多边形B内,可用下列步骤完成:
1。确定两个多边形的边与边是否存在至少一点相交?
2。如存在至少一点相交,则不可能再有包含关系。否则,A,B之间还有三种可能:
A在B内,B在A内,A与B相互分离。
3。要确定A是否在B内,只需检查A的任一顶点是否在B内即可,而此问题曾经讨论过了,只要从A的顶点作一充分长射线,看它与B的交点数的奇偶性即可:奇数交点为在内,偶数交点不在内。
goodsong 2002-05-26
  • 打赏
  • 举报
回复
superzjx2000(锥子)
举个例子说明一下好吗?
比如两个三角形
(a1,b1),(a2,b2),(a3,b3)和(x1,y1),(x2,y2),(x3,y3)
superzjx2000 2002-05-26
  • 打赏
  • 举报
回复
用两个矩阵分别存储两个图形
扫描两个矩阵 看在各个方向上是否总是一个的值大于另一个的值
fang_jb 2002-05-25
  • 打赏
  • 举报
回复
VC有现成函数,可惜没源码:(
goodsong 2002-05-22
  • 打赏
  • 举报
回复
就是看不大懂啊
有没有现成的程序?
one_add_one 2002-05-21
  • 打赏
  • 举报
回复
你可以看看《计算几何》
one_add_one 2002-05-21
  • 打赏
  • 举报
回复
什么是简单多边形?


判断两个多边形的所有边是否有相交的。

如果没有,再判断其中一个点是否在另一个多边形内。(有很多现成的算法)

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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