首页 > 其他分享 >判断一个点是否在一个范围中

判断一个点是否在一个范围中

时间:2024-01-17 10:07:13浏览次数:27  
标签:p2 判断 一个点 point 是否 mPoints getX p1 交点

这个方法可以加入到工具类中去使用.

注意:在使用 此方法在判断 经纬度时,一定要与使用地图一样的经纬度.

附上 :https://api.map.baidu.com/lbsapi/getpoint/index.html

百度地图的拾取坐标系统

/**
     * 返回一个点是否在一个多边形区域内
     * @param mPoints 多边形坐标点列表
     * @param point   待判断点
     * @return true 多边形包含这个点,false 多边形未包含这个点。
     */
    public static boolean isPolygonContainsPoint(java.util.List<Point2D.Double> mPoints, Point2D.Double point) {
        int nCross = 0;
        for (int i = 0; i < mPoints.size(); i++) {
            Point2D.Double p1 = mPoints.get(i);
            Point2D.Double p2 = mPoints.get((i + 1) % mPoints.size());
            // 取多边形任意一个边,做点point的水平延长线,求解与当前边的交点个数
            // p1p2是水平线段,要么没有交点,要么有无限个交点
            if (p1.getX() == p2.getX())
                continue;
            // point 在p1p2 底部 --> 无交点
            if (point.getX() < Math.min(p1.getX(), p2.getX()))
                continue;
            // point 在p1p2 顶部 --> 无交点
            if (point.getX() >= Math.max(p1.getX(), p2.getX()))
                continue;
            // 求解 point点水平线与当前p1p2边的交点的 X 坐标
            double x = (point.getX() - p1.getX()) * (p2.getY() - p1.getY()) / (p2.getX() - p1.getX()) + p1.getY();
            if (x > point.getY()) // 当x=point.x时,说明point在p1p2线段上
                nCross++; // 只统计单边交点
        }
        // 单边交点为偶数,点在多边形之外 ---
        return (nCross % 2 == 1);
    }

标签:p2,判断,一个点,point,是否,mPoints,getX,p1,交点
From: https://blog.51cto.com/u_16206682/9284432

相关文章

  • sql server 判断是否存在数据库,表,列,视图
    1判断数据库是否存在ifexists(select*fromsys.databaseswherename='数据库名')    dropdatabase[数据库名]2判断表是否存在ifexists(select*fromsysobjectswhereid=object_id(N'[表名]')andOBJECTPROPERTY(id,N'IsUserTable')=1)    droptabl......
  • C# socket tcp/ip 如何判断连接是否正常
    判断socket是否断开连接,网上有N种说法:1.Socket.Connected这个属性只能说明上一次通信时还是正常的。比如说你拔掉网线后就它显示还是为true。用这个方法最好和ping一起组合使用。ping的方法如下publicboolPingOC(Stringips){boolret;Processp=newProcess();p.Start......
  • 如果redis没有设置expire,他是否默认永不过期
    如果redis没有设置expire,他是否默认永不过期?默认是的通过EXPIREkeyseconds命令来设置数据的过期时间。返回1表明设置成功,返回0表明key不存在或者不能成功设置过期时间。在key上设置了过期时间后key将在指定的秒数后被自动删除。被指定了过期时间的key在Redis中被称为是不稳定......
  • 使用Optional更优雅地处理非空判断
    (一)引言在平常的编码之中,有一个错误总会在你的意料之外出现,那就是空指针异常。空指针的出现也很简单,你得到了一个null对象,调用了一些方法,出现空指针异常。空指针会出现在各种地方,常见的比如Map.get()没有获取到对象就调用对象例的方法,类对象没有获取到就调用类中的方法。空指针......
  • php 判断是否关注公众号
    $openid="客户openid";//$access_token="通过微信接口获取的访问令牌";$access_token=getToken();$url="https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$access_token."&openid=".$openid;......
  • 深度学习需要float64精度吗,商用NVIDIA显卡的float64性能是否多余呢
    首先要知道这么几个事实,也是交代一下本文要讨论的问题的背景:各大深度学习框架均支持float64类型的简单运算,但是均不支持float64的深度学习的运算操作;作为深度学习运行的加速设备,各种GPU、TPU、NPU的各种XPU均以其卓越的float64精度计算能力作为宣传,如NVIDIA公司的显卡,其商用版......
  • 无涯教程-LISP - 条件判断
    以下是大多数编程语言中常见的典型决策结构的一般形式-LISP提供以下类型的决策构造,单击以下链接以查看其详细信息。Sr.No.Construct&描述1cond此构造用于检查多个判断操作子句。2ifif构造具有多种形式。3when如果test子句的判断输出为true,则执行test操作,否则,对后......
  • Applescript成功实现imessage数据筛选,imessage蓝号检测,无痕检测手机号是否注册imess
    一、imessages数据检测的两种方式:1.人工筛选,将要验证的号码输出到文件中,以逗号分隔。再将文件中的号码粘贴到iMessage客户端的地址栏,iMessage客户端会自动逐个检验该号码是否为iMessage账号,检验速度视网速而定。红色表示不是iMessage账号,蓝色表示iMessage账号。2.编写苹果MacOs......
  • 浏览器页面实现读取和存储文件到c盘,是否能实现?
    浏览器页面实现读取和存储文件到c盘,是否能实现?​​vue浏览器页面实现读取c盘判断是否有制定文件目录,如果没有就创建,有就把从后端请求的视频地址下载到制定目录里,是否能实现?https://www.zhihu.com/question/639174474你的思路是错误的,在用户没有授权的情况下无法实现。在......
  • 浏览器页面实现读取和存储文件到c盘,是否能实现?
    浏览器页面实现读取和存储文件到c盘,是否能实现?​​vue浏览器页面实现读取c盘判断是否有制定文件目录,如果没有就创建,有就把从后端请求的视频地址下载到制定目录里,是否能实现?https://www.zhihu.com/question/639174474你的思路是错误的,在用户没有授权的情况下无法实现。在......