//判断 随机产生的点 和点X 的连线 与地图上已知的两点(给出的坐标中连续的两点)之间的连线 的 交点 是否在 已知的两点的线段之上 如果在之上:那么点X的顺序应该调整到已知的两点中间 function CrosspointIsOnTheLine(point1, point2, point3, point4) { var crossPoint = getCrossPoint(point1, point2, point3, point4);//交点坐标 var result = { online: false,//是否在线段上 nearP2: undefined//如果不在线段上,是否近p2,否则近p3 }; //交点分别到 第2点 和 第3点 之间的距离 等于 第2点到第3点的距离 那么 交点在线段上 var cp_xy = crossPoint.split(','); var p2_xy = point2.split(','); var p3_xy = point3.split(','); var cp_p2_length = getLength(cp_xy[0], cp_xy[1], p2_xy[0], p2_xy[1]);//交点到p2的距离 var cp_p3_length = getLength(cp_xy[0], cp_xy[1], p3_xy[0], p3_xy[1]);//交点到p3的距离 var p2_p3_length = getLength(p2_xy[0], p2_xy[1], p3_xy[0], p3_xy[1]);//p2到p3的距离 //由于线段的长度本身存在精度的问题 ,所以这么比较 交点到 p2和p3的距离 同时小于 p2到p3的距离 说明 交点在 p2到p3的线段上 if (cp_p2_length <= p2_p3_length && cp_p3_length <= p2_p3_length) { result.online = true; } else { //if (cp_p2_length > p2_p3_length) { // result.nearP2 = false; //} //else if (cp_p3_length > p2_p3_length) { // result.nearP2 = true; //} } return result; }
getLength()函数见下一篇
转载于:https://www.cnblogs.com/langu/p/3458835.html
相关资源:求两直线交点的算法