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 に答える