next up previous contents
Next: 2.3 Integration Up: 2. Funktionen auf Flächen Previous: 2.1 Zusammensetzen von Funktionen   Inhalt

2.2 Darstellung von Funktionen durch Splines

Die formale Übereinstimmung von (2.35) und (1.34) legt es nahe, Funktionen auf einer Splinefläche wieder durch Splines darzustellen. Sei die biquadratische Splinefläche p durch (2.1) mit alpha = beta = 2 gegeben. Eine Funktion f_1: P -> R^d auf dieser Fläche beschreiben wir als biquadratischen Spline in der Form

~f_1: [0,1]^2 -> R^d, ~f_1(u,v) = \sum_{j=0}^2 \sum_{k=0}^2 F_{j,k} B^2_j(u) B^2_k(v). (2.36)

Dabei sind die F_{j,k} \in R^d ( j,k = 0, 1, 2) die Kontrollpunkte für die Funktion. Für einen Punkt x = p(u_0,v_0) mit u_0, v_0 \in [0,1] des Flächenstückes P gilt f_1(x) = ~f_1(u_0, v_0), bzw. es gilt ~f_1 = f_1 \circ p. Man kann die Kontrollpunkte F_{j,k} von ~f_1 auch so wählen, daß sie eine vorgegebene Funktion f approximieren.

Sei analog eine Funktion f_2: Q -> R^d auf dem Flächenstück Q durch

~f_2: [0,1]^2 -> R^d, ~f_2(u,v) = \sum_{j=0}^2 \sum_{k=0}^2 G_{j,k} B^2_j(u) B^2_k(v) (2.37)

mit G_{j,k} \in R^d ( j,k = 0, 1, 2) gegeben. Um aus f_1 und f_2 eine stetig differenzierbare Funktion f zu erzeugen, müssen (2.7) und (2.35) erfüllt sein. Wir erhalten dabei die gleichen Bedingungen, die wir schon in Abschnitt 1.6 für glatte Flächen betrachtet haben. Allerdings sind Phi und Psi bereits durch das Zusammensetzen der Flächenstücke bestimmt.

Abbildung 2.2: Function und Map Klassen
Function und Map Klassen

Ist die Fläche durch ein semi-reguläres Kontrollnetz gegeben, beschreiben wir eine Funktion auf dieser Fläche, indem wir zu jedem Kontrollpunkt der Fläche einen Kontrollpunkt für die Funktion angeben. Diese Form der Darstellung einer Funktion ist z.B. zur Darstellung von Meßwerten auf glatten Oberflächen geeignet.

Sowohl die Fläche als auch die Funktion werden dann durch biquadratische G-Splines dargestellt. Neben der Umwandlung des semi-regulären Kontrollnetzes in Bézierkontrollnetze durch den Algorithmus 1.2 muß auch das Kontrollnetz für die Funktion in Bézierkontrollnetze umgewandelt werden. Nachdem Phi und Psi bereits durch die Fläche bestimmt werden, können hierfür die gleichen Formeln wie für die Flächenkontrollpunkte verwendet werden. Dazu müssen wir den Algorithmus 1.2 erweitern. Zusätzlich muß zu jedem Flächenkontrollpunkt der Funktionskontrollpunkt gefunden werden und das Bézierkontrollnetz für die Funktion analog zu dem für die Fläche berechnet werden. Ein Funktionsobjekt stellen wir dabei durch eine von Object abgeleitete Klasse Function dar. Sie enthält einen Zeiger auf die zugehörige G-Spline-Fläche und auf die Map Klasse. Die Map Klasse ist eine Liste, die jedem Kontrollpunkt der Fläche einen Kontrollpunkt der Funktion zuweist. Die Struktur ist grob in Abbildung 2.2 dargestellt. Details zur Implementierung des Algorithmus und der Klassen stehen in Kapitel 4 und im Anhang A. Die Struktur des Algorithmus' 1.2 ändert sich nicht.

Wird auf das Flächenkontrollnetz der Doo-Sabin-Algorithmus 1.3 angewendet, muß auch das Funktionskontrollnetz mit bearbeitet werden. Wie bei der Umwandlung in Bézierkontrollnetze müssen hier die gleichen Formeln auf die Kontrollpunkte der Funktion angewandt werden. Dazu wird der Algorithmus 1.3 so erweitert, daß er neben den Flächenkontrollpunkten auch gleich die Kontrollpunkte aller auf dieser Fläche definierten Funktionen in ein neues Kontrollnetz umwandelt.

Abbildung 2.3: Farbschema zur Darstellung von Funktionen durch Farbwerte
Farbschema zur Darstellung von Funktionen durch Farbwerte
-1.0 0.0 1.0 Magenta Blau Cyan Grün Gelb Rot
Farbschema zur Darstellung von Funktionen durch Farbwerte

Abbildung 2.4: Einheitsnormalenfeld der Acht-Fläche
Einheitsnormalenfeld der Acht-Fläche

Nachdem das Kontrollnetz der Funktion in Bézierkontrollnetze umgewandelt worden ist, haben wir mehrere Möglichkeiten, die Funktion darzustellen. Es bietet sich zunächst an, den Betrag des Funktionswertes in eine Farbe umzuwandeln und die Fläche selbst entsprechend einzufärben. Zu einem gegebenen Punkt x auf der Fläche berechnen wir den zugehörigen Farbwert w(x) aus der über das Bézierkontrollnetz berechneten Funktion. Für skalarwertige Funktionen erhalten wir den Farbwert aus

w(x) = f(x) f_{scale} c_{scale} + c_{delta}. (2.38)

Für vektorwertige Funktionen verwenden wir die euklidische Norm:

w(x) = |f(x)|_2 f_{scale} c_{scale} + c_{delta}. (2.39)

f_{scale} ist dabei ein allgemeiner Skalierungsfaktor für die Funktion. c_{scale} und c_{delta} werden zur Skalierung und Translation der Farbwerte verwendet. Wie in Abbildung 2.3 gezeigt, bilden wir dann das Intervall (-1,1] auf die Farben ab. Funktionswerte in den Intervallen (j,j+2] für ungerade j \in Z werden vorher auf das Intervall (-1,1] verschoben. Die Farbwerte werden durch die Funktionen

C_i(w) = e^{-32 (k_i/6 - w)^2 (2.40)

festgelegt. Die einzelnen Parameter für die Farben sind dabei durch folgende Tabelle gegeben:

Rot links: i = 1; k_i = -7;...  Magenta rechts: i = 8; k_i = 7 (2.41)

Hierbei ist zu beachten, daß wir für Rot und Magenta eine Funktion am linken und am rechten Rand des Intervalls benötigen um einen kontinuierlichen Farbverlauf zu sichern. Der RGB-Farbwert wird schließlich durch

[R; G; B] = ... [r; 0; b] C_8(w) (2.42)

berechnet. r, g, b geben dabei die maximalen Werte für den roten, grünen und blauen Farbkanal an. Normalerweise ist dies 1.0 für alle drei Farben. Da die C_i nur jeweils maximal drei Farbbereiche wirklich beeinflussen, müssen diese bei der Implementierung auch nur jeweils für drei benachbarte Bereiche berechnet werden (siehe Abbildung 2.3). Abbildung 2.5 zeigt eine Fläche, deren Kontrollpunkte über den Whitneyschen Regenschirm mit der Parametrisierung

(u, v) -> [uv; u; v^2], u = -2:0.4:2, v = -2:0.4:2 (2.43)

bestimmt wurden. Die Kontrollpunkte der über Farbwerte dargestellten Funktion wurden durch

(x,y,z) -> (x^2 + y^2)^0.2 (2.44)

aus den Kontrollpunkten der Fläche berechnet.

Abbildung 2.5: (x,y,z) -> (x^2 + y^2)^0.2 auf dem Whitneyschen Regenschirm
(x,y,z) -> (x^2 + y^2)^0.2 auf dem Whitneyschen Regenschirm

Alternativ können wir die Funktionswerte auch durch Stacheln auf der Fläche darstellen. Dazu zeichnen wir eine Strecke vom einem Punkt x auf der Fläche längs des Einheitsnormalenvektors n(x) mit der Länge f(x) f_{scale} für skalarwertige bzw. |f(x)|_2 f_{scale} für vektorwertige Funktionen. Aus den Stacheln können wir natürlich auch eine “Funktionsfläche” über der Fläche erzeugen. Diese kann dann als Gitternetz dargestellt werden oder durch die vorher beschriebene Methode eingefärbt werden. Eine eindimensionale Funktion f: S -> R^3 kann man auch als Vektoren auf der Fläche darstellen.

Die verschiedenen Darstellungsarten lassen sich auch miteinander verknüpfen und sie können mittels eines einzigen Alogrithmus' berechnet werden. Zu jedem biquadratischen Bézierkontrollnetz der Funktion suchen wir zunächst das zugehörige Bézierkontrollnetz der Fläche. Wird schon beim Erzeugen der Bézierkontrollnetze hierauf Rücksicht genommen, können die Kontrollnetze in der gleichen Reihenfolge in jeweils einer Liste abgelegt werden, so daß wir nur noch beide Listen gleichzeitig durchlaufen müssen. Wir legen dann ein Gitter über den Parameterbereich und je nach ausgewählter Darstellungsart berechnen wir den Punkt auf der Fläche, die Flächennormale und den Funktionswert an den Gitterknoten. Die Stacheln, Vektoren und Gitternetze können direkt als Linien dargestellt werden. Für die farbigen Flächen unterteilen wir jedes Quadrat in zwei Dreiecke. Über die Farbwerte an den Ecken lassen sich dann einfach die Farbverläufe auf den Dreiecken bestimmen.

Mit Hilfe der Stacheln kann man z.B. das Einheitsnormalenfeld einer Fläche darstellen. Dazu verwenden wir einfach eine konstante Funktion auf dieser Fläche. Abbildung 2.4 zeigt das Einheitsnormalenfeld einer Acht-Fläche. Die Kontrollpunkte der Fläche wurden durch

(u , v) -> [cos(u) cos(v) sin(v); sin(u) cos(v) sin(v); sin(v)]   für u = 0:pi/5:2pi, v = -pi/2:pi/10:pi/2 (2.45)

berechnet. Die Punkte an der Nahtstelle für u=0 und u=2pi entlang der z-Achse wurden dabei miteinander identifiziert. Auch wurden die Punkte an den beiden “Enden” der Acht miteinander identifiziert, so daß dort jeweils eine Irregularität entsteht. Durch zweimaliges Anwenden des Doo-Sabin-Algorithmus' erhalten wir dann ein G-Spline-Kontrollnetz. Für den singulären Punkt bei (0, 0, 0) haben wir allerdings die durch obige Parametrisierung erzeugten Kontrollpunkte für v=0 beibehalten, da sonst der Doo-Sabin-Algorithmus die Fläche an dieser Stelle trennen würde.

Abbildung 2.6: Dipolpotential
Dipolpotential

In Abbildung 2.6 stellen wir näherungsweise das Potential eines statischen Dipols in der x-y-Ebene dar. Die Fläche ist ist dabei der durch die Kontrollpunkte [u, v, 0]^T mit u = -2.2:0.4:2.2, v=-3:0.4:3 bestimmte Teil der x-y-Ebene. Die Kontrollpunkte der Potentialfunktion wurden durch die Funktion

(x,y) -> 1/(x(x^2+y^2))   für x = -2.2:0.4:2.2, y = -3:0.4:3 (2.46)

erzeugt. Die Funktion wurde durch Stacheln, ein Gitternetz und eine eingefärbte Fläche über der transparenten Ebene dargestellt.


next up previous contents
Next: 2.3 Integration Up: 2. Funktionen auf Flächen Previous: 2.1 Zusammensetzen von Funktionen   Inhalt
Copyright © 1999-2002 Frank C. Langbein. All rights reserved.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation.

Contact: webmaster@langbein.org
URI: http://www.langbein.org/fileadmin/research/surfaces/diploma/HTML/node18.html