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

如何判断两条线是否相交呢?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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,812评论 25 709
  • 前言 多边形偏移 (polygon offset) 算法可能我们印象不深,不过用过 autoCAD 的同学应该有印...
    zyl06阅读 11,635评论 19 14
  • 餐花为赋,饮韵成诗。唯乐与月,对君成之; 唯乐与月,与君醉之。为君醉之,吾欲歌之: 游之于繁星,皓月相望;语之于晦...
    3b6600975b8d阅读 903评论 0 5
  • SQLAlchemy 中文文档翻译计划已启动。 Python 文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,...
    布客飞龙阅读 2,745评论 0 6
  • 【早起的虫儿被鸟吃】早起和晚起跟被吃是三个独立状态,只跟它的累世业障有关,因果轮回,早死也许是为了转世,鸟背负了“...
    花店父子阅读 269评论 0 0