美文网首页
iOS判断两条线是否相交,多边形是否相交

iOS判断两条线是否相交,多边形是否相交

作者: 小沫360 | 来源:发表于2016-05-11 11:37 被阅读1443次

如何判断两条线是否相交呢?demo下载

其实我也不懂这个判断是什么意思,直接从网上拿过来用了,判断方法是用C++写的,传入4个点(2个点确定一条线,就是2条线),返回BOOL值,如果在OC在调用的话,需要将.m文件改成.mm,具体的参见demo,

BOOL LineIntersects( const CPoint& s1, const CPoint& e1, const CPoint& s2, const CPoint& e2 )

//s1,e1,是一条线的起始点和终点,s2,e2是另一条线的起始点和终点

项目中需要在地图上面画区域,然后判断画出来的多边形是否有相交的情况。

需要判断是否相交的多边形

假设是个6变形(多边形同理),[0,1]两点组成的线,需要分别和[2,3],[3,4],[4,5]组成的线判断是否相交,和[1,2],[5,0]相邻,不需要判断是否相交。同理[1,2]组成的线也需要和各个线依次判断一下。思路就是这个样子,很明显,需要两层for循环遍历一下,

直接上代码

for (int i=0; i<detailArray.count-2; i++) {
        
        
        for (int j = i+1; j<detailArray.count-2; j++) {
            
            if (i==0&&j==detailArray.count-3) continue;
            
            CPoint s1 =CPoint([detailArray[i][0] floatValue],[detailArray[i][1] floatValue]);
            
            CPoint e1 =CPoint([detailArray[i+1][0] floatValue],[detailArray[i+1][1] floatValue]);
            
            CPoint s2 = CPoint([detailArray[j+1][0] floatValue],[detailArray[j+1][1] floatValue]);
            
            
            CPoint e2 = CPoint([detailArray[j+2][0] floatValue],[detailArray[j+2][1] floatValue]);
            
            NSLog(@"(%d===%d)----(%d===%d)",i,i+1,j+1,j+2);
            
            if (LineIntersects(s1, e1, s2, e2)) {
                
                NSLog(@"有相交===========");
                
                return;
                
            }
            

测试数据1的图形

测试数据1

测试数据2的图形

测试数据2

测试数据3的图形

测试数据3

相关文章

网友评论

      本文标题:iOS判断两条线是否相交,多边形是否相交

      本文链接:https://www.haomeiwen.com/subject/efqurttx.html