Android 计算多边形中心点坐标

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34476727/article/details/82799117

最近在做室内二维图,用到了一个功能计算出不规则图形的中心点,在这里记录一下集合代码而已:

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

上面是Java的下面是 kotlin的:

/**
     * 获取不规则多边形重心点
     *
     * @param mPoints
     * @return
     */
    fun getCenterOfGravityPoint(mPoints: List<FloorMapBean.SpaceListBean.PointListBean>): PointF {
        var area: Float = 0.0f//多边形面积
        var x: Float = 0.0f
        var y: Float = 0.0f// 重心的x、y
        for (i in 1..mPoints.size) {
            val iLat = mPoints[i % mPoints.size].x
            val iLng = mPoints[i % mPoints.size].y
            val nextLat = mPoints[i - 1].x
            val nextLng = mPoints[i - 1].y
            val temp = (iLat * nextLng - iLng * nextLat) / 2.0f
            area += temp
           x += temp * (iLat + nextLat) / 3.0f
            y += temp * (iLng + nextLng) / 3.0f
        }
        x = x!! / area!!
        y = y!! / area
        return PointF(x, y)
    }

记录到此了…

猜你喜欢

转载自blog.csdn.net/qq_34476727/article/details/82799117