计算形状的中点

时间:2014-10-24 16:10:38

标签: java swing point

我想进行一些转换,例如需要此方法的旋转和缩放。

所以,我在上面提到的包含这个方法的方法中遇到了问题,但我找不到相应的错误(可能有错误)。这种方法是否正确以确定形状的中心点?

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;
}

1 个答案:

答案 0 :(得分:1)

您的方法正确计算了一组点的质心,但我认为您的问题的答案取决于这些点如何定义形状。例如,如果点代表任意闭合折线---形状的轮廓,那么我认为很容易找到一个例子,其中点的质心与封闭区域的质心不一致。想象一个方形区域,在一个角落附近有一堆冗余点......

您的方法计算位于给定点集的凸包内某处的点。也许这对你想做的事情来说已经足够了。

我不知道如何计算任意多边形的精确质心,但您可以通过强力计算近似值:栅格化形状,然后计算落在其中的像素的质心。

-------------编辑-------------

您的第二个示例计算边界矩形的中心。再次,这不是真正的质心,但它可能是令人满意的。

你为什么要这样做?如果它是基于物理的模拟,那么也许你真的需要真正的质心,但如果它是一个GUI,那么边界矩形的中心可能会为大多数形状提供令人满意的用户体验