版权声明:本文为博主原创文章,未经博主允许不得转载。 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)
}
记录到此了…