判断一个点是否在多边形内,射线法,电子围栏

判断一个点是否在多边形内,射线法,电子围栏 

/**
  * 根据某点坐标判断该坐标是否在某区域坐标范围内
  * @param px 目标点x坐标
  * @param py 目标点y坐标
  * @param polygonXA 目标范围xy坐标集合
  * @return
  */
 public boolean rayCasting(double px, double py, String polygon) {
  boolean flag = false;
  String[] points = polygon.split(",");
  for (int i = 0, j = points.length - 2; i < points.length - 1; j = i, i = i + 2) {
   double sx = Double.parseDouble(points[j]);// 从倒数第二依次读取;
   double sy = Double.parseDouble(points[j + 1]);// 从倒第一依次读取;
   double tx = Double.parseDouble(points[i]);// 从第一个依次读取;
   double ty = Double.parseDouble(points[i + 1]);// 从第二个依次读取;
   // 点与多边形顶点重合
   if ((sx == px && sy == py) || (tx == px && ty == py)) {
    return true;
   }
   // 判断线段两端点是否在射线两侧,射线为y轴;
   if ((sy < py && ty >= py) || (sy >= py && ty < py)) {
    // 线段上与射线 Y 坐标相同的点的 X 坐标
    double x = sx + (py - sy) * ((tx - sx) / (ty - sy));
    // 点在多边形的边上
    if (x == px) {
     return true;
    }
    // 射线穿过多边形的边界
    if (x > px) {
     flag = !flag;
    }
   }
  }
  // 射线穿过多边形边界的次数为奇数时点在多边形内
  return flag;
 }

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值