Created
February 24, 2015 18:07
-
-
Save heckenmann/266aa484cd3ff39607b2 to your computer and use it in GitHub Desktop.
Gaußsche Trapezformel
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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