首页 > 其他 > 详细

射线法判断点是否在多边形内部

时间:2021-04-01 18:14:29      阅读:21      评论:0      收藏:0      [点我收藏+]
/**
   * @description 射线法判断点是否在多边形内部
   * @param {Object} p 待判断的点,格式:{ x: X坐标, y: Y坐标 }或者"170 21"
   * @param {Array} poly 多边形顶点,数组成员的格式同p: [{ x: X坐标, y: Y坐标 },{ x: X坐标, y: Y坐标 },{ x: X坐标, y: Y坐标 }]/["170 21", "170 21", "170 21"]
   * @return {String} 点 p 和多边形 poly 的几何关系
   */
  function isPointInPolygon(p, poly) {
  	if(typeof p === ‘string‘) {
		p = {
			x: p.split(‘ ‘)[0],
			y: p.split(‘ ‘)[1]
		}
	}
    var px = p.x,
        py = p.y,
        flag = false
 
    for(var i = 0, l = poly.length, j = l - 1; i < l; j = i, i++) {
    	if(typeof poly[i] === ‘string‘) {
		poly[i] = {
			x: poly[i].split(‘ ‘)[0],
			y: poly[i].split(‘ ‘)[1]
		}
	}
      var sx = poly[i].x,
          sy = poly[i].y,
          tx = poly[j].x,
          ty = poly[j].y
 
      // 点与多边形顶点重合
      if((sx == px && sy == py) || (tx == px && ty == py)) {
        return true;
      }
 
      // 判断线段两端点是否在射线两侧
      if((sy < py && ty >= py) || (sy >= py && ty < py)) {
         // 线段上与射线 Y 坐标相同的点的 X 坐标
         var x = sx + (py - sy) * (tx - sx) / (ty - sy)
         // 点在多边形的边上
         if(x == px) {
           return true;
         }
         // 射线穿过多边形的边界
         if(x > px) {
          flag = !flag
        }
      }
    }
 
    // 射线穿过多边形边界的次数为奇数时点在多边形内
    return flag;
  }

技术分享图片

 

 


转载于:https://www.mizuiren.com/496.html

射线法判断点是否在多边形内部

原文:https://www.cnblogs.com/meijiu/p/14606582.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!