Diese Lösung setzt voraus, dass Sie über eine Datenstruktur verfügen, die die Delaunay-Triangulation mit Hilfe eines "virtuellen unendlichen Delaunay-Eckpunkts" wie folgt darstellt CGAL tut es ( siehe Details hier ).
Die Idee besteht darin, die Delaunay-Randkanten zu finden, d. h. die Kanten, die zwei aufeinanderfolgende Probepunkte miteinander verbinden, und dann die Delaunay-Triangulation zu "durchfluten", um die Delaunay-Flächen zu klassifizieren. Man weiß, dass der unendliche Eckpunkt außen liegt, so dass man seine Nachbarn (und die Nachbarn der Nachbarn usw.) als außen klassifizieren kann, solange man keine Grenzkanten überquert. Erreicht man eine Begrenzungskante, kann man das Nachbardreieck einfach als innen markieren und in ähnlicher Weise fortfahren.
Eingabe Menge von Punkten, die den Rand einer geschlossenen Form dicht abtasten, die auch Löcher enthalten kann
Ausgabe : Voronoi-Diagramm im Inneren der Form (Annäherung an die Mittelachse der Form)
- Berechnen Sie die Delaunay-Triangulation Ihrer Punkte
- Markieren Sie die Delaunay-Kanten, die zwei aufeinanderfolgende Probepunkte verbinden. (Siehe Seite 4-5 der vorliegenden Arbeit wie Sie dies mit einem lokalen Test an jeder Delaunay-Kante erreichen können)
- Alle unendlichen Delaunay-Flächen als OUTSIDE klassifizieren und in eine Warteschlange stellen Q .
- Während Q nicht leer ist
- Delaunay-Fläche f = Pop aus Q
- Für jedes nicht klassifizierte Nachbardreieck t von f
- wenn die Delaunay-Kante, die von t et f markiert ist, klassifizieren. t als das Gegenteil von f
- sonst klassifizieren t das gleiche wie f
- drücken. t a Q
- Für jede Delaunay-Kante e
- wenn die beiden benachbarten Delaunay-Dreiecke d1 , d2 werden beide als INTERIOR eingestuft, wobei das Segment, das den Mittelpunkt von d1 et d2 .
Für eine Eingabe wie diese
kann die folgende Annäherung der Mittelachse berechnet werden:
Sie können überprüfen, wie sich diese Annäherung an die Mittelachse in der Praxis verhält, indem Sie die kostenlose Windows-Binärversion von Mesecina . Quellcode aquí .