美文网首页
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