我想进行一些转换,例如需要此方法的旋转和缩放。
所以,我在上面提到的包含这个方法的方法中遇到了问题,但我找不到相应的错误(可能有错误)。这种方法是否正确以确定形状的中心点?
public Point getCentroid(){
int sumx = 0;
int sumy = 0;
for(int i = 0; i<points.size();i++){
sumx+=points.get(i).getX();
sumy+=points.get(i).getY();
}
Point centroid = new Point(sumx/points.size(), sumy/points.size());
return centroid;
}
先谢谢你们
////////////////////////////////////////// EDIT //// //////////////////////////////////////////////
这样的事情肯定会起作用吗? (我问,因为它还没有工作,只是想知道它是否仍然是因为计算中心)。
public Point getCentroid() {
Vector<Integer> x = new Vector<Integer>();
Vector<Integer> y = new Vector<Integer>();
for(int i=0; i<points.size();i++){
x.add((int) points.get(i).getX());
y.add((int) points.get(i).getY());
}
Point p = new Point((Collections.max(x)-Collections.min(x))/2, (Collections.max(y)-Collections.min(y))/2);
return p;
}
答案 0 :(得分:1)
您的方法正确计算了一组点的质心,但我认为您的问题的答案取决于这些点如何定义形状。例如,如果点代表任意闭合折线---形状的轮廓,那么我认为很容易找到一个例子,其中点的质心与封闭区域的质心不一致。想象一个方形区域,在一个角落附近有一堆冗余点......
您的方法将计算位于给定点集的凸包内某处的点。也许这对你想做的事情来说已经足够了。
我不知道如何计算任意多边形的精确质心,但您可以通过强力计算近似值:栅格化形状,然后计算落在其中的像素的质心。
-------------编辑-------------
您的第二个示例计算边界矩形的中心。再次,这不是真正的质心,但它可能是令人满意的。
你为什么要这样做?如果它是基于物理的模拟,那么也许你真的需要真正的质心,但如果它是一个GUI,那么边界矩形的中心可能会为大多数形状提供令人满意的用户体验