単純ではない凸状の多角形を 2 つの垂直線で切断して、4 つの等しい (面積) 部分に分割する必要があります。
プログラムを書きましたが、テストに合格しません。
- その理由は、丸め誤差または面積を計算する私の機能だと思います。
- 確認してください、正しいですか?
- 靴ひものアルゴリズムとヘロンの公式を使用
コードは次のとおりです。
double calcArea() {
double result = 0;
if (size() > 4) {
int j = size() - 1;
for (int i = 0; i < size() - 1; i++) {
result += (points.get(i).getX() + points.get(j).getX())
*
(points.get(j).getY() - points.get(i).getY());
j = i;
}
result = result / (result >= 0 ? 2. : -2.);
} else if(size() == 3) {
double c,a,b, p;
c = Math.sqrt(Math.pow(points.get(0).getY()-points.get(1).getY(),2)+Math.pow(points.get(0).getX()-points.get(1).getX(),2));
a = Math.sqrt(Math.pow(points.get(1).getY()-points.get(2).getY(),2)+Math.pow(points.get(1).getX()-points.get(2).getX(),2));
b = Math.sqrt(Math.pow(points.get(0).getY()-points.get(2).getY(),2)+Math.pow(points.get(0).getX()-points.get(2).getX(),2));
p = (a + b + c) / 2.;
return Math.sqrt(p*(p-a)*(p-b)*(p-c));
}
return result;
}
私がしていること:
point(x, y)
切断ポリゴンの発見。- で切りました
x = a in [ min(x), max(x)]
- 計算します
S'
(x=min(x) から x=a までのポリゴンの一部) - の場合
S' = S/2
、a
値の計算に使用します(a, *)
y = b
どこでも同じb in [min(y), max(y)]
- もっと速い方法はありますか?