Wie finden Sie den Bereich der komplexen polygon - c++

Für nicht-komplexe Polygone, es ist ziemlich einfach:

A = 1/2 * (x1*y2 - x2*y1 + x2*y3 - x3*y2 + ... + x(n-1)*yn - xn*y(n-1) + xn*y1 - x1*yn)

Hier ist meine Implementierung in C++:

struct Point { 
    double x, y;
} point[210];

double area(int n) {
    double a=0, b=0;
    for(int i=0; i<n-1; ++i) {
        a += point[i].x * point[i+1].y;
        b += point[i].y * point[i+1].x;
    }
    return (a - b)/2;
}

Aber was ist, wenn das polygon ist Komplex? Gibt es eine ähnliche Art und Weise zu finden, die den Bereich?

Hinweis: ich versuchte, verwenden die gleiche Technik, aber es hat nicht funktioniert. Für die polygon -

(0,0) , (0,7) , (4,3) , (0,3) , (2,4) , (2,1) , (0, 0)

die obige Formel gibt mir 28.000, die 26.000. Die einzige Erklärung, die ich geben konnte war, dass das Dreieck (0,3) , (2,4) , (2,3) wird doppelt gezählt(der Punkt (2,3) ist der Schnittpunkt der Segmente (0,3) , (4,3) und (2,4) , (2,1)).

  • Die Formel, die Sie verwenden ist für nicht-sich selbst schneidende Polygone, aber Sie haben eine Kreuzung für die Linien (4,3)-(0,3) und (2,4)-(2,1). Für self-interecting Polygone, die Sie brauchen, um einen Entscheidung, wie zu behandeln, um die Kreuzung.
Schreibe einen Kommentar