Het algoritme: SplitArea keuze uit 2 verbindingen type 0 type 1 type 3 type 2 Skelet segment Geconstrainde edge (originele vlakgrens) Figuur 2 - Er kunnen 4 typen driehoeken worden onderscheiden, door te kijken hoeveel zijdes van een driehoek een originele vlakgrens vormen (dikke lijnen). Door vervolgens de middelpunten van de ongeconstrainde zijdes te verbinden, kun nen we een set aan skeletsegmenten verkrijgen (gestippelde lijnen). te splitsen object er uit moet zien, maken we gebruik van een zogenaamde attrac- tiewaarde. Het ideale oppervlak wat een buur vervolgens moet verkrijgen, moet in verhouding staan met de attractiewaarde van een specifieke buur ten opzichte van de som van de attractiewaarden van alle buren, die meedoen in de splitsoperatie. Het gebruik van de attractiewaardes betekent dus het verdelen van een vlak over de buren op een gewogen manier: hiermee moet het mogelijk zijn een vlak niet alleen precies in het midden te splitsen, maar ook om grotere delen aan bepaalde, aantrekkelijkere buren toe te kennen. Vooraf kunnen we aan de hand van de attractiewaardes bepalen hoe de verdeling er theoretisch uit moet zien en achteraf kunnen we vaststellen in hoe verre dit het geval is. De invoer van het algoritme, wat we SplitArea noemen, bestaat uit de grenzen van het te splitsen vlak en de aanliggende grenzen van de buurobjecten waarop moet worden aangesloten (beide als edges uit de topologische datastructuur). De eerste stap is om een triangulatie uit te voeren. Voor de triangulatie worden de grenzen van het te splitsen object gebruikt. Omdat er een Constrained Delaunay trian gulatie gebruikt wordt, bevat de triangula tie vervolgens alle grenzen van de invoer. Op basis van de driehoeken die binnen het te splitsen object liggen, kunnen we een lijnrepresentatie van het vlakobject opbou wen, dat we hier skelet zullen noemen. Hiervoor gebruiken we een reeds bestaande techniek (Uitermark et al., 1999; Ai and van Oosterom, 2002): Door de driehoeken te classificeren op basis van de hoeveelheid zijdes die een originele vlakgrens van het te splitsen object vormen en deze per cate gorie op een vaste manier te behandelen, verkrijgen we het skelet. We onderscheiden 4 typen driehoeken: o-driehoeken, i-drie- hoeken, 2-driehoeken en 3-driehoeken (afhankelijk van het aantal constrained edges die onderdeel zijn van een driehoek). Figuur 2 illustreert hoe skeletsegmenten worden gemaakt op basis van het type van de geclassificeerde driehoeken. Alle seg menten samen vormen zo het uiteindelijke skelet (Figuur 3a). Om het definitieve skelet te verkrijgen, zullen we nog moeten zorgen dat het skelet verbonden is met de al bestaande vlakgrenzen van de buren rond het object dat we willen splitsen, zie Figuur 3b. Elke aangelegen buurgrens raakt de rand van het object wat gesplitst wordt in één of twee knopen (nodes). Als zo'n knoop nog niet verbonden is met het skelet, wordt er een verbindingssegment gemaakt langs een bestaande zijde van een driehoek. Afhankelijk van hoe de triangulatie eruitziet, kunnen er vervolgens meer of minder verbindingssegmenten per knoop gegenereerd worden. Indien er meer dan één verbindings segment gemaakt wordt, is het nodig om uit de set aan verbindingen er eentje te kiezen. In onze implementatie hebben we gekozen voor het langste segment, maar andere keuzes zijn wellicht beter: de kort ste, of de verbinding die het beste past bij de richting van de aanliggende grens. De volgende stap in het algoritme is om de gegenereerde skeletsegmenten te voorzien van de juiste links en rechts verwijzingen (vanuit de originele topologische datastruc tuur). Figuur 4 geeft een voorbeeld. Voor dit doel bouwen we een tijdelijke graafstruc- tuur op, waarin alle skeletsegmenten, gekozen verbindingssegmenten en aanliggende vlakgrenzen worden opge nomen. Deze graaf representeren we met een winged edge data structuur (Baumgart, 1975)- Het propageren van de topologische relaties start op een willekeurige aanlig gende grens. Hiervan wordt de vlakreferen- tie gebruikt, totdat een andere aanliggende vlakgrens wordt bezocht. Dan wordt hier van de vlakreferentie gebruikt en dit spel herhaalt zich, totdat alle skeletsegmenten type 0 type 1 type 2 Figuur3a - Skeletsegmenten, die afhankelijk van het type driehoek gegenereerd worden. Figuur 3b - Verbindingssegmenten worden gerealiseerd als het skelet nog niet verbonden is met deaanüggende vlakgrenzen. Merk op dat voor de rechterknoop er een keuze is welke verbinding er uiteindelijk gekozen wordt. Figuur 3 - Het skelet verkrijgen. De skeletsegmenten en verbindingen worden lokaal gecreëerd, dat wil zeggen voor elke driehoek afzonderlijk. 16 Geo-Info 2013-3

Digitale Tijdschriftenarchief Stichting De Hollandse Cirkel en Geo Informatie Nederland

Geo-Info | 2013 | | pagina 18