如何判断两条线是否相交呢?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;
}
网友评论