https://blog.csdn.net/tengchongwei/article/details/72922056
1、如图a(x1,y1) b(x2,y2) c(x3,y3) d(x4,y4)
判断c,d是否在线段两端,只需要判断ad和ac的斜率一个比ab的斜率大 另一个比ab的斜率小就行了。判断c在直线ab的上方和判断d在直线ab的下方或者向量是否跨立,最终化简后也可以归根于判断斜率问题。
1、使用链接中的方式,先判断线段的bound是否会相交,加快排除过程再进行如下操作。
2、判断C、D与直线ab的关系
bool value = false;
if((y3-y2)/(x3-x2)<(y1-y2)/(x1-x2))
value = ! value;
if(y4-y2)/(x4-x2)<(y1-y2)/(x1-x2))
value = ! value;
return value;
可将除法转换为乘法
bool value = false;
if((y3-y2)*(x1-x2)<(y1-y2)*(x3-x2))
value = ! value;
if(y4-y2)*(x1-x2)<(y1-y2)*(x4-x2))
value = ! value;
return value;
3、再按同样的步骤判断A、B与直线cd的关系。
如果最终返回true ,则定会相交
判断线段相交的另一种方法
这种方式比较快,将 除法次数降到1