美文网首页
[几何]计算不规则多边形的面积、中心、重心

[几何]计算不规则多边形的面积、中心、重心

作者: MapleShao | 来源:发表于2019-04-25 20:20 被阅读0次

    原文:https://blog.csdn.net/shao941122/article/details/53671643

    最近项目用到:在不规则多边形的中心点加一个图标。(e.g: xx地区发生暴雪,暴雪区域是多边形,给多边形中心加一个暴雪的图标)

    之前的设计是,计算不规则多边形范围矩形bounds的中心点。这个比较简单,对于一些圆,矩形,凸多边形都比较适合。但是遇到凹多边形就会出现问题,比如一个月牙型的不规则多边形,bounds的中心点,就落到月牙外了。就有点难以接受了。

    经过讨论,决定将中心改为重心。

    下面上代码,

    计算不规则多边形的中心:

        /**
         * 获取不规则多边形几何中心点
         *
         * @param mPoints
         * @return
         */
        public static LatLng getCenterPoint(List<LatLng> mPoints) {
            // 1 自己计算
            // 2 使用Google map API提供的方法(推荐)
            LatLngBounds.Builder boundsBuilder = LatLngBounds.builder();
            for (LatLng ll : mPoints)
                boundsBuilder.include(ll);
            return boundsBuilder.build().getCenter();
        }
    

    计算不规则多边形的重心:

        /**
         * 获取不规则多边形重心点
         *
         * @param mPoints
         * @return
         */
        public static LatLng getCenterOfGravityPoint(List<LatLng> mPoints) {
            double area = 0.0;//多边形面积
            double Gx = 0.0, Gy = 0.0;// 重心的x、y
            for (int i = 1; i <= mPoints.size(); i++) {
                double iLat = mPoints.get(i % mPoints.size()).latitude;
                double iLng = mPoints.get(i % mPoints.size()).longitude;
                double nextLat = mPoints.get(i - 1).latitude;
                double nextLng = mPoints.get(i - 1).longitude;
                double temp = (iLat * nextLng - iLng * nextLat) / 2.0;
                area += temp;
                Gx += temp * (iLat + nextLat) / 3.0;
                Gy += temp * (iLng + nextLng) / 3.0;
            }
            Gx = Gx / area;
            Gy = Gy / area;
            return new LatLng(Gx, Gy);
        }
    

    其中LatLng类就是一个包含经纬度点的简单类。可以自己创建一个包含 x ,y 的类代替。

        public class LatLng {
            public final double latitude;
            public final double longitude;
        }
    

    Demo地址:https://github.com/shaoshuai904/GoogleMap_Demo

    通过这张图,就可以发现中心和重心的区别

    1.png 2.png

    项目实际表现:

    3.jpeg 4.jpeg

    原文:https://blog.csdn.net/shao941122/article/details/53671643
    版权声明:本文为博主原创文章,转载请附上博文链接!

    相关文章

      网友评论

          本文标题:[几何]计算不规则多边形的面积、中心、重心

          本文链接:https://www.haomeiwen.com/subject/awdtnqtx.html