Der Algorithmus zur Darstellung von Funktionen auf getrimmten Flächen entspricht im Prinzip dem zur Darstellung der Fläche selbst. Nur zeichnen wir anstatt der Fläche die Funktion in Abhängigkeit von den ausgewählten Darstellungsarten. Pro Punkt der Fläche müssen wir zusätzlich überprüfen, ob er durch eine Trimmkurve im Parameterbereich oder durch eine implizite Funktion im ausgeschnitten wird.
Bei Isolinien gehen wir nicht ganz so direkt vor. Für Quadrate im Parameterbereich der Fläche, die in keinem Trimmbereich liegen, können wir den Algorithmus isolines mit entsprechenden Argumenten aufrufen. Wir verwenden also die Tests aus dem Algorithmus trimmed_bezier, um den Parameterbereich in Quadrate zu zerlegen, die entweder im Trimmbereich oder außerhalb des Trimmbereiches liegen und rufen dann entsprechend isolines auf.
trimmed_isolines |
Zeichnen von Isolinien auf einem getrimmten Bézierflächenstück |
trimmed_isolines wird mit einer Liste der Trimmkurven aufgerufen, die zu dem jeweiligen Bézierflächenstück gehören. Beim ersten Aufruf wählen wir normalerweise das Einheitsquadrat als Parameterbereich und die Rekursionstiefe ist 0. Der erste Teil entspricht natürlich genau dem schon bekannten Testalgorithmus für das Trimming. Nur im zweiten Teil wird isolines mit den entsprechenden Parametern aufgerufen, um die Isolinien zu zeichnen. Obiger Algorithmus führt nur die Unterteilung des Parameterbereiches durch, bis ein gesamtes Quadrat außerhalb oder innerhalb der Trimmbereiche liegt und verwendet dann den Algorithmus für nicht getrimmte Flächen, der mit einer entsprechend großen Rekursionstiefe aufgerufen wird.
Sobald eines der Quadrate vollständig außerhalb des Trimmbereiches liegt, werden über isolines die zugehörigen Isolinien gezeichnet. Liegt ein Quadrat teilweise in einem Trimmbereich, dann wird der Algorithmus rekursiv aufgerufen. Wurde im Algorithmus trimmed_isolines die maximale Rekursionstiefe erreicht, werden die Quadrate, bei denen wenigstens ein Punkt des Parameterbereiches im Trimmbereich liegt, nicht weiter behandelt. Dabei verlieren wir die Isolinien auf den Dreiecken am Rand der Trimmbereiche. Bei feinen Auflösungen ist dies allerdings zu vernachlässigen. Ansonsten könnte man hier noch eine spezielle Version von handle_quad verwenden, die nur ein Dreieck berücksichtigt.
Abbildung 3.11 zeigt eine G-Spline-Fläche mit einer Irregularität der Ordnung . An den drei Kontrollpunkten dieser Irregularität wurde ein kreisähnlicher Trimmbereich über quadratische Trimmkurven ausgeschnitten. Die Fläche selbst ist transparent und hinter ihr stellen wir eine Funktion auf dieser Fläche durch eine farbige Fläche, Stacheln und ein Gitter dar. In Abbildung 3.12 wird eine Funktion auf dem transparenten getrimmten Würfel auf die gleiche Weise dargestellt.
In Abbildung 3.13 ist die verdrehte Acht mit Isolinien aus der Abbildung 2.19 zu sehen. Wir haben sie durch eine implizite Funktion aufgeschnitten. Die Isolinien wurden sowohl etwas oberhalb, als auch etwas unterhalb der Fläche gezeichnet.