[C#] Oppervlake berekenen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 16-09 20:30
Ik heb een oppervlakte met meerdere punten (van 5 tot 60). De oppervlakte is niet per definitie rechthoekig of rond, maar kan ook een Z vorm zijn.

Hier wil ik dus de oppervlakte van gaan berekenen. Als het altijd rechthoekig, of cirkelvorming zou zijn. Is het makkelijk door het gewogen gemiddelde te nemen en de oppervlakte op te splitsen is 3-hoeken (2 aan de rand en het midden). Echter een oppervlakte in Z vorm is zo niet uit te rekenen. Wiskundig gezien zou ik het opdelen is rechthoeken en driehoeken. Maar ik kan me niet bedenken hoe je zoiets netjes kan doen.

Ik heb alleen een lijst met punten (x,y) als data. Deze is al gesorteerd, dus list[0] komt altijd voor list[1].

if broken it is, fix it you should


Acties:
  • 0 Henk 'm!

  • Gleighton
  • Registratie: November 2008
  • Niet online
Ga eerst maar eens kijken hoe je dit wiskundig op kan lossen, dan kan dat als laatste omgezet worden naar C# code. Kijk bijvoorbeeld eens naar de Riemannsom.

Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Wat is gesorteerd? Wat is de volgorde van punten in het geval van een Z-vorm?

Acties:
  • 0 Henk 'm!

  • Phyxion
  • Registratie: April 2004
  • Niet online

Phyxion

_/-\o_

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
double PolygonArea(Point[] polygon)
{
   int i,j;
   double area = 0; 

   for (i=0; i < polygon.Length; i++) {
      j = (i + 1) % polygon.Length;

      area += polygon[i].x * polygon[j].y;
      area -= polygon[i].y * polygon[j].x;
   }

   area /= 2;
   return (area < 0 ? -area : area);
}


Volgens mij wil je een polygon berekenen door de punten van de lijst zoals hier staat. Lijkt mij dan te doen wat je wilt ;)

'You like a gay cowboy and you look like a gay terrorist.' - James May


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Je wil dus gewoon de opervlakte van een concave polygon berekenen? Dan kun je bijvoorbeeld hier kijken: http://www.mathopenref.com/polygonirregulararea.html

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 16-09 20:30
Phyxion schreef op zondag 13 februari 2011 @ 11:43:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
double PolygonArea(Point[] polygon)
{
   int i,j;
   double area = 0; 

   for (i=0; i < polygon.Length; i++) {
      j = (i + 1) % polygon.Length;

      area += polygon[i].x * polygon[j].y;
      area -= polygon[i].y * polygon[j].x;
   }

   area /= 2;
   return (area < 0 ? -area : area);
}


Volgens mij wil je een polygon berekenen door de punten van de lijst zoals hier staat. Lijkt mij dan te doen wat je wilt ;)
Dit is hem volgens mij. Althans de functie geeft terug wat ik wiskundig heb berekend. Mijn dank is groot!

if broken it is, fix it you should


Acties:
  • 0 Henk 'm!

  • Killemov
  • Registratie: Januari 2000
  • Laatst online: 24-08 23:40

Killemov

Ik zoek nog een mooi icooi =)

Dit is dus de naieve berekening voor convex polygonen. Als je de oppervlakte van elke concave polygoon wilt berekenen moet je de polygoon opsplitsen totdat elke subpolygoon convex is en DAN kun je de naieve berekening daar op loslaten. Als de polygoon complex is, bevat minimaal 1 snijpunt met zichzelf, dan moet je daar weer extra subpolygonen voor maken.

Hey ... maar dan heb je ook wat!

Pagina: 1