Toon posts:

[Algemeen]Centroide (zwaartepunt) van willekeurig vlak

Pagina: 1
Acties:
  • 375 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik zit met een wiskundig probleem.
Ik heb allerlei gesloten vlakken met een willekeurige vorm (polygons) waarvan ik de centroide wil bepalen.
Ik heb al het een en ander geprobeerd en voor 90% van de vlakken gaat dat ook wel goed, alleen bij kleine of smalle vlakken gaat het soms nog niet goed.
Ik programmeer in VB6 en ik heb de volgende functies en methoden tot mijn beschikking:
Een shape object, dit is het vlak;
Van dit shape object heb ik alle punten (op een volgend) die dit vlak maken;
De breedte (xMax - xMin) van de shape;
De hoogte (Ymax-Ymin);
en een functie PointInPolygon, deze returned true als het meegegeven punt in de shape zit en anders false.

Nu moet het toch goed mogelijk zijn om in alle gevallen een juiste centroide te bepalen, maar het lukt me niet.
Is er hier iemand die misschien een idee heeft hoe ik dit zou moeten oplossen?

Verwijderd

eventuele (wiskundige manier) om op te lossen, kken geen bal van programmeren in VB... als je nu es zou proberen het vlak op te splitsen in 3 hoeken... dan bereken je daarvan het massacentrum en dan breng je de positie's van de massacentra samen met de oppervlakte van dat stuk in rekening los je zo heel de boel op... lijkt me redelijker om via een lus of zoiets allemaal zwaartepunten van driehoeken te laten uitrekenen... msch een methode voor schrijve (of iets vergelijksbaar....)

voor wiskundige verdere uitleg kan je wel aan mij blijve vrage... VB beter niet :*D

edit: bij nader inzicht wel heel rekenintensief, maar praktisch realiseerbaar...

[ Voor 8% gewijzigd door Verwijderd op 28-06-2005 17:14 ]


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 02-05 01:32
Google weet het wel:
Calculating the area and centroid of a polygon

[ Voor 29% gewijzigd door Soultaker op 28-06-2005 17:15 ]


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 02-05 01:32
Verwijderd schreef op dinsdag 28 juni 2005 @ 17:13:
edit: bij nader inzicht wel heel rekenintensief, maar praktisch realiseerbaar...
Nee, dat valt heel erg mee. Je hoeft de veelhoek namelijk niet echt te trianguleren. Stel je neemt een beginpunt (punt 0) en gaat alle driehoeken af die te vormen zijn met dat punt en twee opvolgende punten van de veelhoek; dan krijg je dus de driehoeken (0,1,2), (0,2,3), (0,2,4), (0,2,5), etc. Als je veelhoek convex is kun je van elke driehoek het zwaartepunt nemen en op het eind het gewogen gemiddelde nemen van die zwaartepunten naar de oppervlakten van de driehoeken; de driehoeken beslaan dan precies de oppervlakte van de veelhoek.

Maar als de veelhoek niet convex is, dan beslaan de driehoeken niet precies het oppervlak van de veelhoek, maar 'toevallig' maakt het niet uit: wat je dan doet is aan 'omgekeerde' driehoeken een negatief gewicht toekennen en dan komt alles precies goed uit. (Deze uitleg heeft eigenlijk een tekening nodig...)

Die methode is dus in een enkele pass uit te voeren; niets inefficiënts aan.

Verwijderd

Topicstarter
Bedankt allemaal.
Ik ga nu het voorbeeld van Soultaker bekijken en uitvoeren.
Ook ik had natuurlijk al via Google gezocht, maar dat artikel had ik niet gevonden.
Het blijkt maar weer dat Google alles kan vinden, mits je de juiste vraag stelt ;)