Die Quad-Edge-Datenstruktur (Delaunay / Voronoi)

18

2 Fragen an die Rechengeometer oder Algebraisten:

Ich fange gerade an, mich mit Computergeometrie zu beschäftigen, und ich liebe sie =)

Ich versuche, den berühmten Artikel von Guibas und Stolfi mit dem Titel "Primitive für die Manipulation allgemeiner Unterteilungen und die Berechnung von Voronoi-Diagrammen" zu lesen , um einen Delaunay-Triangulationsalgorithmus zu implementieren. Ich bin versucht, alle theoretischen Dinge zu überspringen und einfach die Beschreibung der Quad-Edge-Datenstruktur zu lesen, um Zeit zu sparen. Ich denke jedoch, dass es sich lohnen kann, die ganze Mathematik in dem Artikel zu verstehen, wenn die Struktur weit verbreitet ist oder nur, weil sie schön sein kann.

Die Mathematik ist ein bisschen zu eng für mich. Ich bin nicht völlig ahnungslos in Bezug auf die Topologie, aber die Beschreibung ihrer Randalgebra erfordert Kenntnisse der abstrakten Algebra, die ich nicht habe.

Meine beiden Fragen sind: Welche anderen Anwendungen der Quad-Edge-Struktur gibt es neben der Berechnung von Delaunay / Voronoi? Es scheint ein extrem mächtiges Werkzeug zu sein.

Die zweite Frage; Was ist eine abstrakte Algebra? Es wäre großartig, wenn Sie mir einen Verweis auf eine Einführung in die abstrakte Algebra geben könnten, gerade genug, damit ich den Abschnitt über ihre Randalgebra verstehen kann.

Vielen Dank!

bigmonachus
quelle
3
Nur um die Lücken zu füllen: Abstrakte Algebra ist das Studium von Mengen von Elementen, die bestimmte Regeln einhalten. Wie Sie vielleicht erraten haben, sind die Regeln, denen diese Mengen genügen, Eigenschaften wie Schließung, Identitätselemente, das Vorhandensein eindeutiger Inversen, und wenn man mit Kommutativität, Assoziativität usw. fortfährt, handelt es sich um das Studium der Algebra für Mengen, die sich nicht unbedingt wie die reellen Zahlen verhalten (Ein gutes Beispiel sind Permutationen).
Ross Snider
Ich denke, meine zweite Frage wurde ein bisschen falsch gestellt. Ich kenne eine Gruppentheorie. Ich weiß, was ein Ring und ein Feld sind. Es ist nur so, dass sie in dem Artikel eine abstrakte Algebra definieren : "Eine Kantenalgebra ist eine abstrakte Algebra (E, E *, Onext, Rot, Flip), die die Eigenschaften E1-E5 und F1-F5
erfüllt
und ich habe keine ahnung was das bedeutet. Es ist keine Algebra über einem Feld, oder?
bigmonachus

Antworten:

32

Ich denke, Guibas und Stolfis "Randalgebra" -Formalismus ist ein bisschen unnötig.

Alles, was wirklich notwendig ist, ist sich an die Unterscheidung zwischen primären und dualen Graphen zu erinnern. Jede Fläche des ursprünglichen Graphen hat einen entsprechenden dualen Vertex f * ; jede Kante e des Urgraphen hat eine entsprechende Doppelkante e ; und jeder Scheitelpunkt v des ursprünglichen Graphen hat eine entsprechende doppelte Fläche v . Ursprüngliche Kanten verbinden Urscheitelpunkte und separate Urflächen. Doppelkanten verbinden Doppelscheitelpunkte und separate Doppelflächen. Das Doppelte des Doppelten von allem ist das Ursprüngliche. Siehe Abbildung 4 in der Arbeit von Guibas und Stolfi:ffeevv

Ur- und Doppeldiagramme

Guibas und Stolfi schlagen vor, jede Kante (entweder die ursprüngliche oder die duale) als Sammlung von vier gerichteten, orientierten Kanten zu betrachten. Der Einfachheit halber werde ich diese Pfeile nennen . Jeder Pfeil Punkte von einem Endpunkt Schwanz ( e ) an den anderen Endpunkt Kopf ( e )eSchwanz(e)Kopf(e) und lokal trennen zwei Flächen und rechts ( e ) . Die Wahl des Endpunkts, der als Tail bezeichnet werden soll ( e ), liegt beim Dartlinks(e)Recht(e)Schwanz(e)Richtung und die Wahl, welches Gesicht nach ist seine Ausrichtung . (Guibas und Stolfi verwenden "Org" und "Dest" anstelle von "Tail" und "Head", aber ich bevorzuge die kürzeren Labels, weil unnötige Abkürzungen böse sind.)links(e)

Für jeden Dart assoziieren Guibas und Stolfi drei verwandte Darts:e

  1. : Der Pfeil verlässt den Schwanz ( e ) im Gegenuhrzeigersinn nache .tailNext(e)Schwanz(e)e
  2. : Der "gleiche" Pfeil wieFlip(e)elinks(e)Recht(e)
  3. drehen(e)e

tailNext, drehen und drehen

Diese drei Funktionen erfüllen alle Arten von wundervollen Identitäten, wie zum Beispiel die folgenden:

  • Recht(tailNext(e))=links(e)
  • Recht(Flip(e))=links(e)
  • Recht(drehen(e))=Kopf(e)
  • Flip(Flip(e))=e
  • drehen(drehen(drehen(drehen(e))))=e
  • tailNext(drehen(tailNext(drehen(e))))=e

e Flichpe.Flip

Darüber hinaus kann man unter Berücksichtigung dieser drei Funktionen mehrere andere nützliche Funktionen definieren, wie z

  • umkehren(e)=drehen(Flip(drehen(e)))
  • leftNext(e)=drehen(tailNext(drehen(drehen(drehen(e)))))elinks(e)

Wenn Sie diese Funktionen kennen, erfahren Sie schließlich alles über die Topologie der Unterteilung, und jede polygonale Unterteilung einer beliebigen Oberfläche (orientierbar oder nicht) kann mit diesen drei Funktionen codiert werden.

Die Vierkantendatenstruktur ist eine besonders praktische Darstellung eines Oberflächendiagramms, das den Zugriff auf alle diese Funktionen sowie auf mehrere andere zeitlich konstante Vorgänge wie Einfügen, Löschen, Zusammenziehen, Erweitern und Spiegeln von Kanten ermöglicht. Teilen oder Zusammenführen von Eckpunkten oder Flächen; und Hinzufügen oder Löschen von Ziehpunkten oder Kreuzkappen.

Habe Spaß!

Jeffε
quelle
Ich habe OmniGraffle verwendet.
Jeffs