怎么判断两个不规则四边形是否重叠

sdsszk 2018-12-12 09:05:39
怎么判断两个四边形是否重叠,使用C语言;
目前已使用判断一个四边形的四个点是否在两一个四边形内,忘了考虑图片中1的情况,所以最保险的做法是判断不规则四边形是否重叠,求各位大神支招;紧急;写一个函数实现判断四边形是够重叠,谢谢各位大神,有做过类似的请支招。。。。
...全文
1975 24 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 23 楼 sdsszk 的回复:
引用 19 楼 早打大打打核战争 的回复:
可以用图形学方法解决,能适用于任意形状多边形,凹多边形、自交叉、甚至有空洞的都可以。对于windows。先用 CreatePolygonRgn创建两个多边形区域(对你的要求,用 CreatePolygonRgn就可以了,任意复杂的多边形可以用 CreatePolyPolygonRgn),然后对两个区域CombineRgn,使用RGN_AND方法求交,如果返回是NULLREGION就说明不相交。
这种方法得调用第三方库了,我现在纯C语言写的,而且程序是运行在arm开发板的。


不是第三方库,只是WinAPI,桌面版、Windows CE、Windows Mobile、Windows Phone,以及最新的Windows 10 on ARM都可以。如果在Unix/Linux上,可以用Xlib,基本等价的功能,XPolygonRegion、XIntersectRegion、XEmptyRegion。也可以看一下Xlib的实现,这是C库。
赵4老师 2018-12-19
  • 打赏
  • 举报
回复
引用 24 楼 早打大打打核战争 的回复:
引用 23 楼 sdsszk 的回复:
[quote=引用 19 楼 早打大打打核战争 的回复:]
可以用图形学方法解决,能适用于任意形状多边形,凹多边形、自交叉、甚至有空洞的都可以。对于windows。先用 CreatePolygonRgn创建两个多边形区域(对你的要求,用 CreatePolygonRgn就可以了,任意复杂的多边形可以用 CreatePolyPolygonRgn),然后对两个区域CombineRgn,使用RGN_AND方法求交,如果返回是NULLREGION就说明不相交。
这种方法得调用第三方库了,我现在纯C语言写的,而且程序是运行在arm开发板的。


不是第三方库,只是WinAPI,桌面版、Windows CE、Windows Mobile、Windows Phone,以及最新的Windows 10 on ARM都可以。如果在Unix/Linux上,可以用Xlib,基本等价的功能,XPolygonRegion、XIntersectRegion、XEmptyRegion。也可以看一下Xlib的实现,这是C库。
[/quote]
sdsszk 2018-12-18
  • 打赏
  • 举报
回复
引用 19 楼 早打大打打核战争 的回复:
可以用图形学方法解决,能适用于任意形状多边形,凹多边形、自交叉、甚至有空洞的都可以。对于windows。先用 CreatePolygonRgn创建两个多边形区域(对你的要求,用 CreatePolygonRgn就可以了,任意复杂的多边形可以用 CreatePolyPolygonRgn),然后对两个区域CombineRgn,使用RGN_AND方法求交,如果返回是NULLREGION就说明不相交。
这种方法得调用第三方库了,我现在纯C语言写的,而且程序是运行在arm开发板的。
everysthing 2018-12-18
  • 打赏
  • 举报
回复
可以试试三维数组,使用三维数组来表示一个点,用三维数组集来表示四边形,若2个四边形有重合,则至少定有一点坐标相同
赵4老师 2018-12-18
  • 打赏
  • 举报
回复
引用 19 楼 早打大打打核战争 的回复:
可以用图形学方法解决,能适用于任意形状多边形,凹多边形、自交叉、甚至有空洞的都可以。对于windows。先用 CreatePolygonRgn创建两个多边形区域(对你的要求,用 CreatePolygonRgn就可以了,任意复杂的多边形可以用 CreatePolyPolygonRgn),然后对两个区域CombineRgn,使用RGN_AND方法求交,如果返回是NULLREGION就说明不相交。

于我心有戚戚焉。
zgbzsu2008 2018-12-18
  • 打赏
  • 举报
回复
1,可以求A四边形4条边 跟B四边形4条边的交点 如果有交点则四边形相交
2,如果没有交点 则再简单判断下是否完全包含的关系
  • 打赏
  • 举报
回复
可以用图形学方法解决,能适用于任意形状多边形,凹多边形、自交叉、甚至有空洞的都可以。对于windows。先用 CreatePolygonRgn创建两个多边形区域(对你的要求,用 CreatePolygonRgn就可以了,任意复杂的多边形可以用 CreatePolyPolygonRgn),然后对两个区域CombineRgn,使用RGN_AND方法求交,如果返回是NULLREGION就说明不相交。
zhouqunhai 2018-12-15
  • 打赏
  • 举报
回复
有点复杂啊啊
636f6c696e 2018-12-15
  • 打赏
  • 举报
回复
的确遗漏了这种情况,只能判断对角线上所有点是否在另一个四边形之内了 既然你能实现判断点是否在四边形之内,那么线条也不难做吧
引用 5 楼 sdsszk 的回复:
[quote=引用 3 楼 niiiloc 的回复:] 说说我的想法: 四边形重叠等价于存在顶点在另一个四边形之内。 这里举个简单的例子:一个四边形是菱形,坐标是1,1 0,0 2,1 1,0 那么对于y=1,如果顶点在四边形内部,那么x的范围是[1,2] 事实上对于任意y,如果顶点在四边形内部,x的范围是[y,y+1] y范围是[0,1] 用另一个四边形坐标代入这个公式计算就可以知道,另一个四边形顶点是否在这个四边形之内。 然后再反过来计算一遍,问题就解决了。
我开始就是按照这种方法做的,可是后来发现图中1的情况不能满足,还是使用是否有重叠安全一点。[/quote]
sdsszk 2018-12-15
  • 打赏
  • 举报
回复
现在的做法是分两种情况:1、矩形的点在不规则四边形内部;2、对于图一的情况,使用不规则四边形的外接矩形与另一个矩形的重心距离小于两个矩形宽或高的和的一半。
这两种情况基本囊括所有的情况.
sdsszk 2018-12-13
  • 打赏
  • 举报
回复
引用 7 楼 赵4老师 的回复:
凹四边形
麻花状四边形
……


引用 7 楼 赵4老师 的回复:
凹四边形
麻花状四边形
……
大体就是我画的那几种情形,C语言实现老师;
zhouqunhai 2018-12-13
  • 打赏
  • 举报
回复
不对,没考虑完全覆盖的情况
zhouqunhai 2018-12-13
  • 打赏
  • 举报
回复
每个四边形任意两顶点的连线由交点
赵4老师 2018-12-13
  • 打赏
  • 举报
回复
凹四边形
麻花状四边形
……
sdsszk 2018-12-13
  • 打赏
  • 举报
回复
引用 1 楼 流浪小狗 的回复:
当年做多边形几何求子、交、并、补,求助了数据库 Postgresql 与 PostGIS,
可以计算任意形状的计算。
http://postgis.net/docs/manual-2.5/ST_Covers.html
这个可以不引用开源库,抽成一个函数单独调用吗?或者里边有相关的算法吗
sdsszk 2018-12-13
  • 打赏
  • 举报
回复
引用 3 楼 niiiloc 的回复:
说说我的想法:
四边形重叠等价于存在顶点在另一个四边形之内。

这里举个简单的例子:一个四边形是菱形,坐标是1,1 0,0 2,1 1,0
那么对于y=1,如果顶点在四边形内部,那么x的范围是[1,2]
事实上对于任意y,如果顶点在四边形内部,x的范围是[y,y+1] y范围是[0,1]

用另一个四边形坐标代入这个公式计算就可以知道,另一个四边形顶点是否在这个四边形之内。
然后再反过来计算一遍,问题就解决了。
我开始就是按照这种方法做的,可是后来发现图中1的情况不能满足,还是使用是否有重叠安全一点。
sdsszk 2018-12-13
  • 打赏
  • 举报
回复
我现在可以不适用开源库,单独写一个函数来实现吗?
636f6c696e 2018-12-13
  • 打赏
  • 举报
回复
说说我的想法: 四边形重叠等价于存在顶点在另一个四边形之内。 这里举个简单的例子:一个四边形是菱形,坐标是1,1 0,0 2,1 1,0 那么对于y=1,如果顶点在四边形内部,那么x的范围是[1,2] 事实上对于任意y,如果顶点在四边形内部,x的范围是[y,y+1] y范围是[0,1] 用另一个四边形坐标代入这个公式计算就可以知道,另一个四边形顶点是否在这个四边形之内。 然后再反过来计算一遍,问题就解决了。
  • 打赏
  • 举报
回复
PostGIS 是开源的,下载她的源码,而后里面一定有C的函数解决你的问题。
  • 打赏
  • 举报
回复
当年做多边形几何求子、交、并、补,求助了数据库 Postgresql 与 PostGIS,
可以计算任意形状的计算。
http://postgis.net/docs/manual-2.5/ST_Covers.html
加载更多回复(4)

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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