0

cloneList = Point[](放入构造函数的一系列点)我已经尝试了很多次来修复这个公式,但是我想要。该公式可在 http://en.wikipedia.org/wiki/Shoelace_formula上找到。 index(i) 是一个同时具有 x 和 y 值的点。

public double getArea() {
    double area = 0;


    for (int i = 0; i < cloneList.length-1; i++){



    area += cloneList[i].getX()*cloneList[i+1].getY() - cloneList[i+1].getX()+cloneList[i].getY();

}


    area = area/2;
    //System.out.println(Math.abs(area));
return Math.abs(area);
}
4

1 回答 1

0

我不熟悉这个公式,但我会试一试......在我看来,你似乎没有正确遵循这个公式,这将是我的实现(基于我从 wiki 页面 xD 收集的内容)

public double getArea(){
    double area = 0;
    int n = cloneList.length;
    double firstSum = 0;
    double secondSum = 0;
    for(int i = 0;i< cloneList.length - 1;i++){
        firstSum+= cloneList[i].getX()*cloneList[i+1].getY();
        secondSum+= cloneList[i+1].getX()*cloneList[i].getY();
    }
    firstSum+=cloneList[cloneList.length-1].getX()*cloneList[0].getY();
    secondSum-=cloneList[0].getX()*cloneList[cloneList.length-1].getY();

    double finalSum = firstSum-secondSum;
    area = Math.abs(finalSum)/2;
    return area;



}
于 2013-04-18T04:00:34.890 回答