zoukankan      html  css  js  c++  java
  • 判断一个点是否在一个区域中

     最近开发geofence中涉及到比较一个点在一个区域中的情景,
    所以写了一个向量算法:
    public double Angle(Model.LatLng cen, Model.LatLng first, Model.LatLng second)
            {
                double dx1, dx2, dy1, dy2;
                double angle;
                dx1 = first.Lat - cen.Lat;
                dy1 = first.Lng - cen.Lng;
                dx2 = second.Lat - cen.Lat;
                dy2 = second.Lng - cen.Lng;
                double c = (double)Math.Sqrt(dx1 * dx1 + dy1 * dy1) * (double)Math.Sqrt(dx2 * dx2 + dy2 * dy2);
                if (c == 0) return -1;
                angle = ((double)Math.Acos((dx1 * dx2 + dy1 * dy2) / c) * 180) / Math.PI;
                return angle;
            }

    #region 取点比较
                    int Pcount = list.Count - 1;
                    for (int i = 0; i < Pcount; i++)
                    {
                        Model.LatLng P0 = new Model.LatLng();
                        Model.LatLng P1 = new Model.LatLng();
                        Model.LatLng P2 = new Model.LatLng();
                        Model.LatLng Pdy = new Model.LatLng();
                        Pdy.Lat = model_dynamic.Lat;
                        Pdy.Lng = model_dynamic.Lng;
                        //
                        int j = i + 1;
                        if (Pcount <= j)
                        {
                            P0 = list[i];
                            P1 = list[i + 1];
                            P2 = list[0];
                        }
                        else
                        {
                            P0 = list[i];
                            P1 = list[i + 1];
                            P2 = list[i + 2];
                        }
                        double geo_angle = Angle(P1, P0, P2);
                        double dynamic_angle = Angle(P1, P0, Pdy);
                        if (geo_angle >= dynamic_angle)
                        {
                            inout = 0;
                        }
                        else
                        {
                            inout = 1;
                        }
                        if (inout == 1)
                        {
                            break;
                        }
                    }
                    #endregion

    以上是核心代码。
    如果有什么不明白的也可以邮件给我!
  • 相关阅读:
    Linux服务器集群系统(一)--转
    linux文件操作命令--转
    HTTP Referer二三事---转
    Linux / Unix Command: bunzip2--reference
    SimpleUrlHandlerMapping 处理器映射的配置--转
    CSRF 攻击的应对之道--转
    Java 7之集合类型
    Flyweight_pattern--reference
    21 Free SEO Tools For Bloggers--reference
    存储在图的形式——邻接列表
  • 原文地址:https://www.cnblogs.com/yuqicook/p/1966398.html
Copyright © 2011-2022 走看看