Flächenberechnung anhand von.

Gast #2120136
Lesenswert?

Hallo liebe Leute!


Ich habe ein neues Projekt.
Und zwar möchte ich ein Programm schreiben, welches anhand von 
Koordinaten (X,Y) mir eine Fläche berechnet.

Die Anzahl der Koordinatenpunkte ist beliebig, je mehr Punkte, desto 
genauer soll die Rechnung (logischerweise) ausfallen.

Man stelle sich also eine Art Landkarte vor, die bespielsweise 
Deutschland abbildet. So soll nun auch die Fläche aussehen, die anhand 
der Punkte am Rand (Umfang) berechnet werden soll.

Nur: Wie berechne ich sowas? Ich habe leider keine Ahnung wie ich sowas 
mache.

Vielleicht könnt ihr mir helfen?!




Vielen Dank und Gruß
Robert
Gast #2121080
Lesenswert?

Danke erstmal für den Link mit der Formel, diesen werde ich mir genauer 
ansehen.

@Joe G.: Die "weißen Flächen" würden in diesem Fall zur Fläche (grün) 
addiert werden.

Der Sinn der Flächenberechnung ist, dass ich später auch ein Volumen 
damit berechnen kann (hoffe ich zumindest) ;-)

Würde denn nun diese Gaussche Trapezformel auch die Fläche der oben 
gezeigten Karte anhand dieser einzigen Formel berechnen? Oder muss man 
zunächst die Karte in mehrere Einzel-Polygone/Trapeze unterteilen?

Das versteh' ich noch nicht.



Gruß
Gast #2121112
Lesenswert?

Das mit der konvexen Hülle verstehe ich auch noch nicht ganz.

Wird sie auch für die Flächenberechnung eines Polygons mit einer Anzahl 
von n Punkten? Oder war deine Antwort auf das Volumenberechnen bezogen?

Ich habe ein VB-Projekt gefunden, welches ausschließlich die Gaussche 
Formel zum Berechnen der Fläche benötigt und nicht die Hülle.

Nicht dass wir aneinander vorbei reden :)

Gruß
robert
Gast #2121123
Lesenswert?

Die konvexe Hülle brauchst du um diesen Spezialfall abzufangen:

Beitrag "Re: Flächenberechnung anhand von."

Mit der konvexen Hülle berechnest du erstmal nur die Punktmenge aus 
deinen XY-Kooridnaten welche minimal nötig ist um alle Punkte 
einzuspannen.

Daraus kannst du dann mit der Flächenformel die Fläche berechnen.

In 3D ist das alles etwas komplizierter, da musst du schon genau sagen 
was für ein Volumen du berechnen willst.
Gast #2121208
Lesenswert?

Wiegesagt, dieser Fehler tritt nie auf, da alle Punkte so liegen, dass 
es keine "weißen Flächen" (wie in der Karte) gibt.

Mit einem Messgerät (Tachymeter) wird zum Beispiel ein Erdhaufen 
vermessen.
Die Grundfläche des Erdhaufens liegt ja komplett (ohne "weiße Fläche") 
am Boden auf, sodass das Phänomen nicht passieren kann.


D.h., dass ich die konvexe Hülle dann doch nicht benötige?

Später soll dann berechnet werden, wieviel Kubikmeter Erde z.B. sich 
dort befinden.
Wie sieht die Volumenberechnung (3D) aus?



Gruß
Moderator #2121302
Lesenswert?

Die Messpunkte alleine bilden noch kein (eindeutiges) Volumen. Du musst
dich für eine Methode entscheiden, mittels der Punkte eine Oberfläche
festzulegen. Mit dieser Oberfläche ist dann auch das Volumen definiert.

Hier findest du die Begriffe, nach denen du weitersuchen kannst:

  http://en.wikipedia.org/wiki/3D_scanner#Reconstruction.2C_or_Modeling

Wahrscheinlich ist ein Polygonnetz (Polygon mesh) das, was dich weiter-
bringt. Wenn der Erdhaufen mit dem Tachymeter zeilenweise abgescannt
wird und jede Zeile aus gleichvielen Messpunkten besteht, ist die
Erstellung dieses Modells und dessen Volumenberechnung recht einfach.

Liegen die Messpunkte unregelmäßig, musst du irgendwie entscheiden, wel-
che der Punkte jeweils benachbart sind und zusammen ein Flächenelement
bilden. Dafür gibt es in der Literatur mehrere Verfahren unterschiedli-
cher Qualität und Komplexität. Die anschließende Volumenberechung ist
dann wieder einfach.
Gast #2121468
Lesenswert?

Oh mann, das wird ja lustig ...


Zielen wir mal gleich auf die Volumenberechnung..:

 - Benötige ich für die dann auch die Gaussche Formel oder berechne ich 
die dann mit einem anderen Verfahren (wie oben schon geschrieben wurde: 
Polygonnetz)?

Ich weiß leider nicht wo ich ansetzen soll.




Gruß
Gast #2121738
Lesenswert?

Hi,

das QuickHull-Programm berechnet ja auch dieses Polygonnetz.

Aber was genau gibt es mir dann als "Ergebnis"?



Wie errechnet man denn dann das Volumen? Das Problem ist, dass man über 
dieses Programm fast nix im Netz findet und ich noch immer nicht genau 
weiß, welches Verfahren man nehmen sollte.

Nochmals konkret:

 - Für Flächenberechnung: Gaussche Formel
 - Für Volumenberechnung: QuickHull, und/oder was noch??



Gruß
Gast #2122147
Lesenswert?

Also zur Flächenberechnung habe ich nun folgenden Code in VB 2008 
geschrieben. (VB deshalb, weil man am schnellsten einen Erfolg sieht):

1
Imports System.IO
2

3

4
Public Class Form1
5
    Dim AnzahlPunkte As Integer
6

7
    Dim X As New List(Of String)     'saubere aufbereitete Strings
8
    Dim Y As New List(Of String)
9
    Dim Z As New List(Of String)
10

11
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
12
        Dim pDatei As New StreamReader("C:\test.pkn")
13

14
        Dim i As Integer                'Zählvariable
15
        i = 0
16

17
        Do Until pDatei.Peek() = -1
18
            Dim Zeile As String = pDatei.ReadLine()
19
            Dim trot() As String
20
            Dim trotz() As String
21
            Zeile = Zeile.Replace(".", ",")     ' Mache aus Punkt ein Komma (Trennzeichen)
22
            trot = Zeile.Split("  ")
23
            X.Add(trot(3))
24
            Y.Add(trot(5))
25
            trotz = Zeile.Split("   ")
26
            Z.Add(trotz(8))
27
            i = i + 1
28
        Loop
29

30
        AnzahlPunkte = X.Count        ' Zuweisung der Anzahl der Punkte
31
        MsgBox(gauss_area() & " m²")
32

33
    End Sub
34
    'Welche Einheit haben die Punkte (Koordinaten)?
35

36
    Public Function gauss_area() As Double
37
        Dim w As Integer
38
        Dim Area As Double
39
        Dim xs, ys, xa, ya As Double
40

41
        xs = X.Item(0)
42
        ys = Y.Item(0)
43

44
        For w = 0 To AnzahlPunkte - 1
45
            xa = X.Item(w)
46
            ya = Y.Item(w)
47
            Area = Area + (ys + ya) * (xs - xa)
48
            xs = xa
49
            ys = ya
50
        Next w
51

52
        ' der letzte Punkt ist wieder der erste Punkt
53
        xs = X.Item(0)
54
        ys = Y.Item(0)
55

56
        Area = Area + (ys + ya) * (xs - xa)
57

58
        ' Rückgabewert
59
        gauss_area = Math.Abs(Area) / 2
60
    End Function
61

62
End Class


Könnt gerne mal drüber schauen ob Euch ein Fehler auffällt.

Die berechnete Fläche wirkt schon noch sehr groß ;-)




Gruß
Robert
#2122267
Lesenswert?

robert c. schrieb:
> Könnte mir jemand mal Step-by-Step erklären, was ich nun (noch) machen
> muss, um das Volumen zu berechnen?
>
>
> Vielen Dank!

Bin nicht ganz so fit in diesem Bereich (Karl Heinz Buchegger kennt sich 
mit so was deutlich besser aus), aber:
Von QuickHull zum Volumen geht es z.B. über die Delaunay-Triangulation. 
Diese Triangulation kann z.T. mit dem QuickHull in n+1-Dimensionen 
berechnet werden
http://en.wikipedia.org/wiki/Delaunay_triangulation#d-dimensional_Delaunay
andere Möglichkeiten 
http://mathoverflow.net/questions/979/algorithm-for-finding-the-volume-of-a-convex-polytope
(oder in den qhull Quelltext schauen).
Gast #2122282
Lesenswert?

Ok super, vielleicht meldet sich ja Karl-Heinz mal bei mir, habe davon 
leider wirklich nicht viel Ahnung, da ich sowas noch nie gemacht habe.


Ich schau mir mal die Links durch und werde mich wieder melden, wenn ich 
fragen habe.



Gruß
Gast #2123052
Lesenswert?

So...An die Denkenden eine Frage:

Was um Himmels Willen ist in meinem Programm falsch? :)

Das Ergebnis der Fläche ist nicht richtig :o(


Könnt ihr mir sagen wo der Fehler liegt?

Ich suche seit 3 Stunden und finde nichts....



Gruß
Gast #2123199
Lesenswert?

Warum machst du so eine komplizierte for-Schleife (die eindeutig falsch 
ist)?

Ich kann kein Basic also überlasse ich dir das zu übersetzen:
1
double area = 0;
2
for (int i = 0; i < n; i++)
3
{
4
  area += (y[i] + y[(i+1)%n]) * (x[i] - x[(i+1)%n]);
5
}
6
return abs(area)/2.0;

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren