70,020
社区成员




这种方法得调用第三方库了,我现在纯C语言写的,而且程序是运行在arm开发板的。 [quote=引用 19 楼 早打大打打核战争 的回复:]
可以用图形学方法解决,能适用于任意形状多边形,凹多边形、自交叉、甚至有空洞的都可以。对于windows。先用 CreatePolygonRgn创建两个多边形区域(对你的要求,用 CreatePolygonRgn就可以了,任意复杂的多边形可以用 CreatePolyPolygonRgn),然后对两个区域CombineRgn,使用RGN_AND方法求交,如果返回是NULLREGION就说明不相交。
可以用图形学方法解决,能适用于任意形状多边形,凹多边形、自交叉、甚至有空洞的都可以。对于windows。先用 CreatePolygonRgn创建两个多边形区域(对你的要求,用 CreatePolygonRgn就可以了,任意复杂的多边形可以用 CreatePolyPolygonRgn),然后对两个区域CombineRgn,使用RGN_AND方法求交,如果返回是NULLREGION就说明不相交。
可以用图形学方法解决,能适用于任意形状多边形,凹多边形、自交叉、甚至有空洞的都可以。对于windows。先用 CreatePolygonRgn创建两个多边形区域(对你的要求,用 CreatePolygonRgn就可以了,任意复杂的多边形可以用 CreatePolyPolygonRgn),然后对两个区域CombineRgn,使用RGN_AND方法求交,如果返回是NULLREGION就说明不相交。
[quote=引用 3 楼 niiiloc 的回复:] 说说我的想法: 四边形重叠等价于存在顶点在另一个四边形之内。 这里举个简单的例子:一个四边形是菱形,坐标是1,1 0,0 2,1 1,0 那么对于y=1,如果顶点在四边形内部,那么x的范围是[1,2] 事实上对于任意y,如果顶点在四边形内部,x的范围是[y,y+1] y范围是[0,1] 用另一个四边形坐标代入这个公式计算就可以知道,另一个四边形顶点是否在这个四边形之内。 然后再反过来计算一遍,问题就解决了。
凹四边形
麻花状四边形
……
凹四边形
麻花状四边形
……
当年做多边形几何求子、交、并、补,求助了数据库 Postgresql 与 PostGIS,
可以计算任意形状的计算。
http://postgis.net/docs/manual-2.5/ST_Covers.html
说说我的想法:
四边形重叠等价于存在顶点在另一个四边形之内。
这里举个简单的例子:一个四边形是菱形,坐标是1,1 0,0 2,1 1,0
那么对于y=1,如果顶点在四边形内部,那么x的范围是[1,2]
事实上对于任意y,如果顶点在四边形内部,x的范围是[y,y+1] y范围是[0,1]
用另一个四边形坐标代入这个公式计算就可以知道,另一个四边形顶点是否在这个四边形之内。
然后再反过来计算一遍,问题就解决了。