Home | Lehre | Videos | Texte | Vorträge | Software | Person | Impressum, Datenschutzerklärung |
Gehen Sie so vor:
Legen Sie eine Klassenstruktur an, die aus Polygonen gebildete Körper als einfache Boundary Representation speichert:
Körper = Liste von Polygonen
Polygon = Liste von Nummern von Kanten
Kante = Paar von Nummern von Punkten
Obendrein brauchen Sie eine Liste, in der Koordinaten der Punkte stehen. Zur Beschleunigung können Sie vorsehen, dass Kanten zusätzlich speichern, in welchen Polygonen sie vorkommen, und dass Punkte zusätzlich speichern, in welchen Kanten sie vorkommen.
Schreiben Sie eine Funktion, die eine solche Struktur nach Doo-Sabin unterteilt und als Ausgabe wieder eine solche Struktur erzeugt.
Beispiele für funktionale Ergänzungen, um vier Punkte für das Programm zu erreichen:
Nachtrag: Beispiel einer Möglichkeit,
den Algorithmus auszulegen
// siehe getrennte Bilddatei.
// Schritt A
Für alle Kanten tue:
Bestimme den mittleren Punkt
k der Kante.
Für alle Polygone des ursprünglichen Körpers tue:
Bestimme den Mittelwert m (ein 3D-Vektor) aller
Eckpunkte des jeweiligen Polygons.
Für alle Eckpunkte des jeweiligen Polygons
tue:
Berechne den Mittelwert
aus dem jeweiligen Eckpunkt, aus m und den mittleren Punkten k der beiden
Kanten, die in ihm zusammenstoßen.
Merke dir diesen 3D-Vektor
als Partner des jeweiligen alten Eckpunkts.
// Diese soeben berechneten 3D-Vektoren sind die Eckpunkte des neuen,
verfeinerten Körpers.
// Jetzt müssen wir die zu Polygonen verbinden. Dabei entstehen
meist Vierecke, aber nicht ausschließlich!
// Schritt B
Für alle Polygone des ursprünglichen Körpers tue:
Verbinde die für dieses Polygon abgespeicherten
neuen Punkte zu einem Polygon des verfeinerten Körpers.
// Schritt C
Für alle Kanten des ursprünglichen Körpers tue:
Verbinde die vier neu berechneten Punkte, die Nachbarn
dieser Kante sind, zu einem Polygon des verfeinerten Körpers (immer
ein Viereck).
// Schritt D
Für alle Eckpunkte des ursprünglichen Körpers tue:
Verbinde die neu berechneten Punkte, die Nachbarn
dieses Eckpunkts sind, zu einem Polygon des verfeinerten Körpers.
// Die Datenstrukturen, die speichern, welche Fläche des neuen Körpers an eine bestimmte Kante des neuen Körpers grenzt etc., müssen dabei ebenfalls aufgebaut werden. Jede Kante darf weiterhin nur einmal in der Datenstruktur stehen.