Skip to content

Instantly share code, notes, and snippets.

@heckenmann
Created February 24, 2015 18:07
Show Gist options
  • Save heckenmann/266aa484cd3ff39607b2 to your computer and use it in GitHub Desktop.
Save heckenmann/266aa484cd3ff39607b2 to your computer and use it in GitHub Desktop.
Gaußsche Trapezformel
public class Trapezformel {
public static void main(String[] args) {
// Quadrat; 1*1
double[][] vektoren1 = {{2.0, 2.0},
{3.0, 2.0},
{3.0, 3.0},
{2.0, 3.0}};
double flaeche1 = getFlaeche(vektoren1);
System.out.println("Fläche Quadrat: " + flaeche1);
// Quadrat mit Vektoren in unterschiedliche Quadranten; 4*4
double[][] vektoren2 = {{-2.0, -2.0},
{2.0, -2.0},
{2.0, 2.0},
{-2.0, 2.0}};
double flaeche2 = getFlaeche(vektoren2);
System.out.println("Fläche Quadrat 2: " + flaeche2);
// Dreieck mit der Hälfte der Fläche2; (4*4) / 2
double[][] vektoren3 = {{-2.0, -2.0},
{2.0, -2.0},
{2.0, 2.0}};
double flaeche3 = getFlaeche(vektoren3);
System.out.println("Fläche Dreieck: " + flaeche3);
// Von einem Polygon umgebene Fläche; (4*4) + (4*4) / 2
double[][] vektoren4 = {{-2.0, -2.0},
{2.0, -2.0},
{6.0, 0.0},
{2.0, 2.0},
{-2.0, 2.0}};
double flaeche4 = getFlaeche(vektoren4);
System.out.println("Fläche Polygon: " + flaeche4);
// Polygon mit Überschneidung der Kanten; FEHLER!
double[][] vektoren5 = {{-2.0, -2.0},
{2.0, 2.0},
{2.0, -2.0},
{-2.0, 2.0}};
double flaeche5 = getFlaeche(vektoren5);
System.out.println("Fläche Polygon Überschneidung (FEHLER): " + flaeche5);
// Polygon mit Überschneidung der Kanten; KORREKT (Schnittpunkte der Kanten müssen als Vektor angegeben werden)
double[][] vektoren6 = {{-2.0, -2.0},
{0.0, 0.0},
{2.0, -2.0},
{2.0, 2.0},
{0.0, 0.0},
{-2.0, 2.0}};
double flaeche6 = getFlaeche(vektoren6);
System.out.println("Fläche Polygon Überschneidung (KORREKT): " + flaeche6);
}
// Berechnet die Fläche nach der Gaußschen Trapezformel
// !!! Die Kanten des Polygons dürfen sich nicht überschneiden !!!
public static double getFlaeche(double[][] vektoren) {
double flaeche = 0;
int n = vektoren.length;
if (n < 3) {
return 0;
}
for (int i = 0; i < n - 1; i++) {
flaeche = flaeche + (vektoren[i][0] + vektoren[i + 1][0]) * (vektoren[i + 1][1] - vektoren[i][1]);
}
flaeche = flaeche + (vektoren[n - 1][0] + vektoren[0][0]) * (vektoren[0][1] - vektoren[n - 1][1]);
return flaeche < 0 ? 0 - (flaeche / 2) : flaeche / 2;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment