0

単純ではない凸状の多角形を 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/2a値の計算に使用します(a, *)
  • y = bどこでも同じb in [min(y), max(y)]
  • もっと速い方法はありますか?
4

0 に答える 0