Mathematik online lernen im Mathe-Forum. Nachhilfe online
Startseite » Forum » Polygonfläche berechnen

Polygonfläche berechnen

Schüler Berufsschulen, 5. Klassenstufe

Tags: berechnen, dotnet, Fläche, Polygon

 
Antworten Neue Frage stellen Im Forum suchen
Neue Frage
goldengel

goldengel aktiv_icon

20:09 Uhr, 01.12.2009

Antworten
Hallo

Ich habe gerade in einer kleinen Applikation eine Polygon-Flächenberechnung programmiert.
http://www.tb-electronics.ch/temp/Fl%C3%A4chenberechnung.exe


Leider funktioniert die Formel nicht bei einigen Figuren. Ich habe in
http://en.wikipedia.org/wiki/Point_in_polygon nachgelesen, dass es zu unterscheiden gilt ob man regelmässige oder unregelmässige Polygone berechnen möchte.

Sowas in dieser Art möchte ich berechnen können:
http//www.efg2.com/Lab/Graphics/PolygonArea.htm

Nun ist es so, dass ich kein Mathematiker bin, es sicherlich Formeln mit der Lösung gibt, ich sie aber nicht umsetzen kann in meine VB.Net Programmiersprache weil die Formeln und Zeichen nicht verstehe und lesen kann.

Bitte helft mir doch eine Funktion zu schreiben, die ZB beliebige Punkte (positiver Wertebereich) beinhalten und mit der ich dann die Fläche berechnen kann in Pixel.

Vielleicht könnt ihr mir Anhand des Bildes ein Beispiel nennen mit Zahlen anstatt mit einer Formel?

Name, X,Y
P0=0,2
P1=1,0
P2=4,0
P3=4,3
P4=3,4
P5=3,1
P6=2,1
P7=2,3


Flaechenberechnung
screenshot - 2009_12_01 08-04-31
screenshot - 2009_12_01 08-07-56
screenshot - 2009_12_01 08-08-55

Für alle, die mir helfen möchten (automatisch von OnlineMathe generiert):
"Ich möchte die Lösung in Zusammenarbeit mit anderen erstellen."
Hierzu passend bei OnlineMathe:
Bestimmtes Integral (Mathematischer Grundbegriff)
Flächenberechnung durch Integrieren
Online-Nachhilfe in Mathematik
Antwort
hagman

hagman aktiv_icon

20:33 Uhr, 01.12.2009

Antworten
Private Function CrossProd(ByRef P As PointF, ByRef Q As PoitnF) As Single
   return P.XQ.Y-P.YQ.X
End Function

Private Function CalcArea(ByRef Lpts As List(of PointF)) As Single
  j= LPts.count-1
   Ac = CrossProd( Lpts(0), Lpts(j) )
   For i=1 to j
     Ac += CrossProd( Lpts(i), Lpts(i-1) )
   Next
   Return Math.Abs(Ac 0.5);
End Function
Frage beantwortet
goldengel

goldengel aktiv_icon

22:05 Uhr, 01.12.2009

Antworten
Hallo hagman

Ich habe Tränen in den Augen vor Freude!
Das funktioniert perfekt bei meinen ersten vier Tests!
Ich kann noch gar nicht glauben, dass ich über das Zählen von Schnittlinien versuchen wollte an die Lösung zu kommen.

Hagman, YOU MADE MY DAY!!!

Falls Du mal was brauchst, hast Du was gut bei mir.
So schnell und gut wurde mir glaub ich noch nie in einem Forum geholfen!

Mit Freude an der Arbeit
Timo

Pokal Hagman