判断两条线是否相交---javascript

来源:互联网 发布:防拷贝软件 编辑:程序博客网 时间:2024/05/21 09:31

下面是js中判断两条线是否相交的代码:

function isIntersect(line1, line2){// 转换成一般式: Ax+By = Cvar a1 = line1.endPoint.y - line1.startPoint.y;var b1 = line1.startPoint.x - line1.endPoint.x;var c1 = a1 * line1.startPoint.x + b1 * line1.startPoint.y;//转换成一般式: Ax+By = Cvar a2 = line2.endPoint.y - line2.startPoint.y;var b2 = line2.startPoint.x - line2.endPoint.x;var c2 = a2 * line2.startPoint.x + b2 * line2.startPoint.y;// 计算交点var d = a1*b2 - a2*b1;// 当d==0时,两线平行if (d == 0) {return false;}else {var x = (b2*c1 - b1*c2) / d;var y = (a1*c2 - a2*c1) / d;// 检测交点是否在两条线段上if ((isInBetween(line1.startPoint.x, x, line1.endPoint.x) || isInBetween(line1.startPoint.y, y, line1.endPoint.y)) &&(isInBetween(line2.startPoint.x, x, line2.endPoint.x) || isInBetween(line2.startPoint.y, y, line2.endPoint.y))) {return true;}}return false;}//如果b在a和c之间,返回true//当a==b或者b==c时排除结果,返回falsefunction isInBetween(a, b, c) {// 如果b几乎等于a或c,返回false.为了避免浮点运行时两值几乎相等,但存在相差0.00000...0001的这种情况出现使用下面方式进行避免if (Math.abs(a-b) < 0.000001 || Math.abs(b-c) < 0.000001) {return false;}return (a < b && b < c) || (c < b && b < a);}