如何确定平面上两个多边形的重合区域?

时间:2022-09-28 03:59:31
一个平面上有2个n边形区域(3<n<200),已知所有顶点的坐标。问:如何确定这两个多边形区域是否有重合部分,如果有,如何确定重合区域的顶点坐标?

11 个解决方案

#1


最差的想法:1。任意两边是否有交点;(记录交点)2 。判断一个多边形的点是否在另一个多边形内(记录点的位置) 3。再交换判断一个多边形的点是否在另一个多边形内(记录点的位置) 。

都没有,OK!.
如果有:所有的点构成重合区域的顶点坐标

注意:边界判断!

#2


简单点的:判断两个平行于坐标轴的矩形是否有重合。
我写了一个算法,大体与yanghuajia所说的相似,太过烦琐。
有好的算法

#3


顶一顶,看看还有什么好办法?

#4


参阅下书, P139
周培德,卢开澄,<计算几何----算法分析与设计>,清华大学出版社,广西科学技术出版社,1999

#5



根据坐标,就可以啦!!
你都知道它的坐标,就好计算啦!

#6


求交点了哦。。。。。。。。

#7


其实这个算法和三维图形隐匿线算法差不多,应该是很复杂的。如果是点阵图像,应该有很简单的算法。这里我简单介绍一下两个凸n边形的算法思路:
1)设两个凸多边形A:a1a2a3...am和B:b1b2b3...bn
2)求出A在B内的顶点{ar,as,...}
3) 求出B在A内的顶点{bp,bq,...}
4) 上面的两个点集构成了公共区域多边形的部分顶点 
5)求两个多边形的两个交点,很容易判断,略去
对于非凸多边形的情形,可以分解成若干个凸多边形的情况。原理和上面一样。

#8


在做GIS时我曾经做个关于两个图形合并的问题,是挺复杂的,由于采用的是线形存储坐标点,所以还设计一个画图的方向问题。以下是我的算法:
当然针对凸的,对于非凸的判定情况与此差不多
1)判断两个图形的旋转方向(只有顺时针和逆时针两种)
2)求出所有的交点。
3)将所有的顶点与交点重新构成一个数组(因为所需点可能是顶点)。
4)指定旋转方向提取出按顺序的点构成重合部分。
对于第3,4 步还有问题是在旋转方向上如果一条线段出现二个以上交点会产生问题,于是可以增加辅助点来完成。

#9


用颜色试一试:

  首先在白板上画出一个多边形区域,并将其涂上一种已知颜色,注意,多边形的边的颜色一定不要与所涂颜色一致。然后再画另一多边形并涂以另一颜色,涂色和画线时要用异或方式。此时图片重叠区域应该有不同的颜色,并交叉的顶点有另外的颜色。剩下的你自己应该会处理了。

#10


将你的多边形用同样大的矩阵表示,多边形内用1表示,外用0表示,
两个或多个矩阵作逻辑与(and)运算所得的矩阵表示两个或多个多边形
重叠的部分。
顶点坐标-----考虑中

#11


这一问题我实际编写过一个软件,有点繁.

#1


最差的想法:1。任意两边是否有交点;(记录交点)2 。判断一个多边形的点是否在另一个多边形内(记录点的位置) 3。再交换判断一个多边形的点是否在另一个多边形内(记录点的位置) 。

都没有,OK!.
如果有:所有的点构成重合区域的顶点坐标

注意:边界判断!

#2


简单点的:判断两个平行于坐标轴的矩形是否有重合。
我写了一个算法,大体与yanghuajia所说的相似,太过烦琐。
有好的算法

#3


顶一顶,看看还有什么好办法?

#4


参阅下书, P139
周培德,卢开澄,<计算几何----算法分析与设计>,清华大学出版社,广西科学技术出版社,1999

#5



根据坐标,就可以啦!!
你都知道它的坐标,就好计算啦!

#6


求交点了哦。。。。。。。。

#7


其实这个算法和三维图形隐匿线算法差不多,应该是很复杂的。如果是点阵图像,应该有很简单的算法。这里我简单介绍一下两个凸n边形的算法思路:
1)设两个凸多边形A:a1a2a3...am和B:b1b2b3...bn
2)求出A在B内的顶点{ar,as,...}
3) 求出B在A内的顶点{bp,bq,...}
4) 上面的两个点集构成了公共区域多边形的部分顶点 
5)求两个多边形的两个交点,很容易判断,略去
对于非凸多边形的情形,可以分解成若干个凸多边形的情况。原理和上面一样。

#8


在做GIS时我曾经做个关于两个图形合并的问题,是挺复杂的,由于采用的是线形存储坐标点,所以还设计一个画图的方向问题。以下是我的算法:
当然针对凸的,对于非凸的判定情况与此差不多
1)判断两个图形的旋转方向(只有顺时针和逆时针两种)
2)求出所有的交点。
3)将所有的顶点与交点重新构成一个数组(因为所需点可能是顶点)。
4)指定旋转方向提取出按顺序的点构成重合部分。
对于第3,4 步还有问题是在旋转方向上如果一条线段出现二个以上交点会产生问题,于是可以增加辅助点来完成。

#9


用颜色试一试:

  首先在白板上画出一个多边形区域,并将其涂上一种已知颜色,注意,多边形的边的颜色一定不要与所涂颜色一致。然后再画另一多边形并涂以另一颜色,涂色和画线时要用异或方式。此时图片重叠区域应该有不同的颜色,并交叉的顶点有另外的颜色。剩下的你自己应该会处理了。

#10


将你的多边形用同样大的矩阵表示,多边形内用1表示,外用0表示,
两个或多个矩阵作逻辑与(and)运算所得的矩阵表示两个或多个多边形
重叠的部分。
顶点坐标-----考虑中

#11


这一问题我实际编写过一个软件,有点繁.