一、规则
判断两多边形是否相交,排除边边重合、以及断点与边重合的情况
二、示意图
示意图.png
三、算法代码(js)
/**
* 判断两个多边形是否相交(边边重合,点边重合除外)
* 核心算法:1-快速排除算法 2-矢量叉乘跨立算法 3-射线算法
*
* @param polygon1
* @param polygon2
*/
function intersectsPolygonAndPolygonNew(polygon1, polygon2) {
// 两多边形是否相交标记
var _ifIntersect;
// 经纬度转换成平面坐标
var polygon1Points = pathConvert(polygon1);
var polygon2Points = pathConvert(polygon2);
// 快速排除法判断是否相交
_ifIntersect = fastExclude(polygon1Points, polygon2Points);
if (_ifIntersect == false) {
return _ifIntersect;
}
// 获取线段集合
var _polygon1Segs = getSegs(polygon1Points);
var _polygon2Segs = getSegs(polygon2Points);
// 跨立法判断相交
_ifIntersect = judgeIntersect(_polygon1Segs, _polygon2Segs);
if(_ifIntersect) {
return _ifIntersect;
}else {
// 判断是否包含
var _containPointNum = 0;
for (var i = 0; i < polygon1Points.length - 1; i++) {
var _ifContain = judgePointInPolygon(polygon1Points[i], _polygon2Segs);
if (_ifContain) {
_containPointNum++;
}
}
if (_containPointNum == polygon1Points.length - 1) {
return _ifIntersect = true;
} else {
return _ifIntersect = false;
}
}
// 获取多边形线段集合
function getSegs(poin