Aufgabe Modellieren Sie mittels Bézier-Kurven einen Kreis.

Slides:



Advertisements
Ähnliche Präsentationen
Hauptseminar Robot/Computer Vision SS 2001 Active Contours von Andrew Blake und Michael Isard B-Splines Florian Klaschka.
Advertisements

Christian Scheideler SS 2009
Definition [1]: Sei S eine endliche Menge und sei p eine Abbildung von S in die positiven reellen Zahlen Für einen Teilmenge ES von S sei p definiert.
Eine dynamische Menge, die diese Operationen unterstützt,
Polynomial Root Isolation
Steigung m berechnen Man kann die Steigung auch berechnen,
Simulation komplexer technischer Anlagen
Gruppenwettbewerb. Gruppenwettbewerb Aufgabe G1 (8 Punkte)
Algebraische Zahlen: Exaktes Rechnen mit Wurzeln
Schnelle Matrizenoperationen von Christian Büttner
Die Beziérkurve Adrian Lehmann
Finale Semantik und beobachtbares Verhalten
Seminar „Extrapolationsmethoden für zufällige Felder“
1 1. Splineglättung 1.1 Motivation 1.2 Notation 1.3 Splineglättung
Graphische Datenverarbeitung
Klicke Dich mit der linken Maustaste durch das Übungsprogramm!
Numerik partieller Differentialgleichungen
Diese Fragen sollten Sie beantworten können
Universität Stuttgart Wissensverarbeitung und Numerik I nstitut für K ernenergetik und E nergiesysteme Numerik partieller Differentialgleichungen, SS 03Teil.
Kapitel 5 Stetigkeit.
Kapitel 6 Differenzierbarkeit. Kapitel 6: Differenzierbarkeit © Beutelspacher Juni 2005 Seite 2 Inhalt 6.1 Die Definition 6.2 Die Eigenschaften 6.3 Extremwerte.
Kapitel 3 Analytische Geometrie
Datentyp  Zusammenfassung von Mengen von "Werten" mit auf
Universität Stuttgart Wissensverarbeitung und Numerik I nstitut für K ernenergetik und E nergiesysteme Numerik partieller Differentialgleichungen, SS 01Teil.
Bit Commitment mit quadratischen Resten Vortrag von Josef Pozny
(Ron Rivest, Adi Shamit, Leonard Adleman , 1977)
Bézier und NURBS Kurven & Flächen Vortrag von Stefan Endler
Minimum Spanning Tree: MST
Kubische Bézier Kurven
Mathematische Grundlagen und Rechnen mit algebraischen Zahlen
Bézier-Bernstein Methoden für Bivariate Polynome
Folie 1 § 30 Erste Anwendungen (30.2) Rangberechnung: Zur Rangberechnung wird man häufig die elementaren Umformungen verwenden. (30.1) Cramersche Regel:
§9 Der affine Raum – Teil 2: Geraden
§9 Der affine Raum – Teil 2: Geraden
Folie 1 § 29 Determinanten: Eigenschaften und Berechnung (29.1) Definition: Eine Determinantenfunktion auf K nxn ist eine Abbildung (im Falle char(K) ungleich.
Seminar Stringtheorie und Geometrische Methoden der Physik
Variationsformalismus für das freie Teilchen
§10 Vektorraum. Definition und Beispiele
Computergrafik – Inhalt Achtung! Kapitel ist relevant für CG-2!
§17 Produkte und Quotienten von Vektorräumen
Computergraphik mit OpenGL Einführung. Bilder Objekt existiert im Raum unabhängig vom Betrachter Objekte sind beschrieben durch die Position verschiedener.
Sali zäma.
§24 Affine Koordinatensysteme
NURBS & CO eine kurze Vorstellung, vor allem an Hand von Beispielen
Zeichnen linearer Funktionen
Effiziente Algorithmen
Effiziente Algorithmen
Effiziente Algorithmen
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Beweissysteme Hartmut Klauck Universität Frankfurt WS 06/
§3 Allgemeine lineare Gleichungssysteme
Polynome und schnelle Fourier-Transformation
Gleichungen und Gleichungssysteme
Dynamische Visualisierungen zum Fundamentalsatz der Algebra
Teil 2: Kurven und Flächen
Lineare Funktionen und ihre Schaubilder, die Geraden
Inhalt Definition des Integrals Infinitive Flächen (offenes Intervall)
Die spline-Interpolation

Die spline-Interpolation
LK-MA - Christopher Schlesiger
Automaten, formale Sprachen und Berechenbarkeit II SoSe 2004 Prof. W. Brauer Teil 3: Potenzreihen und kontextfreie Sprachen (Vgl. Buch von A. Salomaa)
Petrinetze 1. Einführung Informatik : wesentlich Modellierung von
Stetige Kleinste-Quadrate-Approximation
Klassen von Flächen Costa-Fläche
Folie 1 §21 Das Produkt von Matrizen (21.1) Definition: Für eine (m,n)-Matrix A und eine (n,s)-Matrix B ist das (Matrizen-) Produkt AB definiert als (21.2)
Programmiersprachen II Vorbesprechung Klausur Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
© WZL/Fraunhofer IPT Splines in der Datenverarbeitung Seminarvortrag von Selman Terzi Aachen, den
Lineare Optimierung Nakkiye Günay, Jennifer Kalywas & Corina Unger Jetzt erkläre ich euch die einzelnen Schritte und gebe Tipps!
 Präsentation transkript:

Aufgabe Modellieren Sie mittels Bézier-Kurven einen Kreis. Hinweis: Beginnen Sie mit einem Viertelkreis Modellieren Sie anschließend eine Kugel aus Bézier-Patches

2.9 Freiformkurven und -flächen – Rationale Kurven Rationale Bézier-Kurven Mit polynomialen Segmenten lassen sich Kegelschnitte, wie z.B. Kreise und Ellipsen, nicht exakt darstellen. Um dies zu ermöglichen, betrachten wir Bézier-Kurven in projektiven Räumen unter Verwendung von homogenen Koordinaten. Als Gewichte der Kontrollpunkte bi führen wir die Größen wi ein. Somit erhalten wir die Darstellung für rationale Bézier-Kurven. Letztere sind gebrochen-rationale Funktionen, d.h. Zähler und Nenner sind Polynome. Mit dieser Technik wird es möglich, Kegelschnitte exakt darzustellen.

2.9 Freiformkurven und -flächen – Rationale Kurven Wir erhalten folgende rationale Bézier-Kurvendarstellung:

2.9 Freiformkurven und -flächen – Rationale Kurven 10 1 10 10 1 10 1 1 1 1 Einfluss unterschiedlicher Punktgewichte 1 1

2.9 Freiformkurven und -flächen – Rationale Kurven Beispiel: Darstellung eines Viertelkreises b1 = (1,1) b0 = (0,1) w1 = w0 = 1 b2 = (1,0) w2 = 1

2.9 Freiformkurven und -flächen – Splinekurven Bei der Interpolation mit Polynomen treten insbesondere bei hohen Polynomgraden starke Oszillationen auf. Um diese Oszillationen einzudämmen, setzt man Kurven aus mehreren Segmenten von niedrigem Polynomgrad zusammen. Von den einzelnen Teilpolynomen verlangt man, dass sie sich in den Nahtstellen (die hier mit den Stützstellen übereinstimmen) „glatt“ aneinander- fügen.

2.9 Freiformkurven und -flächen – Splinekurven Definition: Ck-Stetigkeit Eine Funktion f(t) ist Ck-stetig (k  0), wenn die Funktion und ihre k Ableitungen stetig sind. Ck [t0 ,tn] ist die Klasse der Ck-stetigen Funktionen auf dem Intervall [t0 ,tn]. Definition: Spline = {t0, t1, L , tn} sei ein monotoner (Knoten-)Vektor mit reellen Stützstellen ti< ti+1. Eine Funktion S heißt Spline vom Grad k-1 (von der Ordnung k), wenn gilt: S ist ein Polynom vom Grad k-1 in jedem Teilintervall [ti, ti+1] S ist Ck-2-stetig auf [t0, tn].

2.9 Freiformkurven und -flächen – Splinekurven Bemerkungen: 1. Der Spline S wird als interpolierender Spline bezeichnet, wenn für gegebene Interpolationspunkte (Ordinaten). 2. Der interpolierende Spline ist i.a. nicht eindeutig bestimmt. Er hat noch k-2 Freiheitsgrade, d.h. eine Vorgabe von Rand- bedingungen ist nötig. Für kubische Spines (k=4) wählt man oft die natürlichen Randbedingungen S´´(t0) = 0 und S´´(tn) = 0. Identifiziert man die Knoten t0 und tn miteinander, so entsteht ein geschlossener Spline (ohne Randbedingungen).

2.9 Freiformkurven und -flächen – Splinekurven Kubische Splines Statt die Form der interpolierenden Funktion vorzuschreiben, z.B. als Polynom eines bestimmten Höchstgrades, kann man auch Eigenschaften vorschreiben, wie z.B. einen möglichst „glatten“ Verlauf. Fordern wir [1] unter den Nebenbedingungen [2] , und so ergibt sich folgendes Resultat:

2.9 Freiformkurven und -flächen – Splinekurven Satz: minimum-norm property Unter allen Funktionen , die die Bedingung [2] erfüllen, erteilt die interpolierende kubische Splinefunktion dem Integral [1] den kleinsten Wert. Es gibt verschiedene Möglichkeiten, die beiden Freiheitsgrade der Spline-Funktionen zu nutzen. Hier werden die beiden am häufig- sten verwendeten Fälle behandelt. und natürlicher Spline periodischer Spline

2.9 Freiformkurven und -flächen – Splinekurven Um den Weg zu Algorithmen für Splinekurven aufzuzeigen, berechnen wir hier zunächst einmal die Koeffizienten eines natürlichen kubischen Splines: für Dies führt auf folgende Bedingungen für die Polynome Si:

2.9 Freiformkurven und -flächen – Splinekurven Dies hat folgende Auswirkungen auf die Koeffizienten:

2.9 Freiformkurven und -flächen – Splinekurven Wir setzen i:=ti+1-ti und erhalten nach einigen Umformungen:

2.9 Freiformkurven und -flächen – Splinekurven Da gilt, die also bekannt sind, ist im Wesentlichen ein lineares Gleichungssystem mit n-1 Gleichungen und bislang n+1 Unbekannten ci (i=0,...,n) zu lösen. Für einen natürlichen kubischen Spline gilt , was c0=cn=0 bedeutet. Fassen wir nun die Erkenntnisse zu einem Algorithmus zusammen:

2.9 Freiformkurven und -flächen – Splinekurven Algorithmus für natürliche kubische Splines Gegeben seien n+1 Stützstellen ti mit t0 < t1 < ... < tn und die Funktionswerte (bzw. Interpolationspunkte) . Gesucht ist der zugehörige natürliche kubische Spline S in der Darstellung für und Berechnung der Koeffizienten : [3]

2.9 Freiformkurven und -flächen – Splinekurven [4] [5] [6] Bemerkungen: 1. Die Gleichungen [4] lauten in Matrizenschreibweise (Gleichungssystem für ci )

2.9 Freiformkurven und -flächen – Splinekurven mit

2.9 Freiformkurven und -flächen – Splinekurven 2. Die Matrix A ist tridiagonal, symmetrisch, diagonal-dominant, positiv definit und besitzt nur positive Elemente. A ist damit regulär und das lineare Gleichungssystem hat eine ein- deutige Lösung. Als Lösungsverfahren sollte man die direkte LU-Zerlegung für tridiagonale Matrizen verwenden, da der Algorithmus Komplexität O(n) hat. Im Fall periodischer Splines entfallen die Randbedingungen und es ergibt sich ein analoger Algorithmus.

2.9 Freiformkurven und -flächen – Splinekurven Algorithmus für periodische kubische Splines Identifiziert man die Stützstellen t0 und tn miteinander, d.h., p0 = pn , die Interpolationskurve ist geschlossen und besitzt auch bei t0 (bzw. tn) einen C2-stetigen Übergang, so ändert sich an dem o.g. Algorithmus nur die Matrix A des Systems [4]:

2.9 Freiformkurven und -flächen – Splinekurven Diese Matrix A ist zyklisch tridiagonal, symmetrisch, diagonal- dominant, positiv definit und besitzt nur positive Elemente; d.h. A ist gut konditioniert. Das System kann wiederum in 0(n) gelöst werden.

2.9 Freiformkurven und -flächen – Splinekurven Da die Aufgabe der Splines in CAD im Wesentlichen in der Modellierung ebener oder räumlicher Kurven besteht, benötigen wir im folgenden den Begriff des vektorwertigen oder parametrischen Splines. Definition : Ist eine Zerlegung des Intervalls so heißt eine Abbildung parametrischer Spline vom Grad k-1 (Ordnung k), wenn die Komponentenfunktionen Splines vom Grad k-1 sind. Insbesondere gilt für die „Komponenten-Splines“ xi : , wofür wir im folgenden kurz schreiben.

2.9 Freiformkurven und -flächen – Splinekurven Lokale Glattheitseigenschaften räumlicher Kurven, die durch Aneinanderhaftung von Teilkurven entstehen, belegt man üblicherweise mit folgender Begriffsbildung: Definition: Sind und parametrische Kurven mit und und haben den gemeinsamen Punkt X(t1)=Y(s0), so sprechen wir genau dann von einem Ck-Übergang der Kurven in ihrem gemeinsamen Punkt, wenn gilt: für alle r mit 1  r  k. (Unstetigkeiten werden als C-1-stetig bezeichnet.)

2.9 Freiformkurven und -flächen – Splinekurven Algorithmus für parametrische kubische Splines Gegeben seien von einer Raumkurve die Interpolationspunkte Gesucht ist ein interpolierender parametrischer kubischer Spline. 1. Schritt: Parametrisierung: Festlegung der Parameterwerte ti (i = 0,...,n) zu den Interpolationspunkten 2. Schritt: Festlegung der Randbedingungen 3. Schritt: Berechnung der Spline Komponenten Sx,Sy,Sz so dass Sx(ti)=xi, Sy(ti)=yi, Sz(ti)=zi, (i=0,...,n) mit Hilfe des jeweiligen Spline-Algorithmus,

2.9 Freiformkurven und -flächen – Splinekurven Bemerkung: Bei geschlossenen Kurven eignen sich periodische Splines, sofern die Kurve überall „glatt“ ist. Liegen eine oder mehrere „Spitzen“ vor (C0-Übergängen, z.B. beim Querschnitt einer Tragfläche), dann eignen sich natürliche Splines mit den Spitzen als Anfangs- und Endpunkten.

2.9 Freiformkurven und -flächen – Splinekurven Parametrisierungen Die Parameterwahl bestimmt sehr stark das Aussehen und damit auch die Qualität der Kurven (und Flächen). Gleiche Interpolationsaufgabe mit unterschiedlichen Parametrisierungen

2.9 Freiformkurven und -flächen – Splinekurven Parametrisierungen Die Wirkung der Parameterwahl kann durch folgende kinematische Interpretation visualisiert werden: Der Kurvenparameter t wird als Zeitparameter aufgefasst, der angibt, wie lange ein Punkt X benötigt, um die Kurve X(t) zu durchlaufen. Wir betrachten zunächst die Interpolation einer Punktmenge durch eine Kurve; d.h. wir legen ein Parameterintervall [a,b] zugrunde und interpolieren n+1 Punkte.

2.9 Freiformkurven und -flächen – Splinekurven Äquidistante Parametrisierung Bei der äquidistanten Parametrisierung steht nun für jedes zu interpolierende Punktepaar (Pi,Pi+1) die gleiche Durchlaufzeit zur Verfügung. Sind die Abstände zwischen den Punkten sehr unterschiedlich, so muss der Kernpunkt X die Interpolationskurve mit unterschiedlicher Geschwindigkeit durchlaufen. Folgt einem großen Abstand ein kleiner Abstand, so muss die größere Geschwindigkeit stark „abgebremst“ werden, was zu einem „Überschwingen“ der Interpolationskurve führen kann.

2.9 Freiformkurven und -flächen – Splinekurven Chordale Parametrisierung Die Parametrisierung sollte der „Struktur der Punktmenge“ in gewissem Sinne angepasst werden. Einen solchen Zugang liefert die chordale Parametrisierung, Die Parameterintervalle werden proportional zu den Abständen benachbarter Stütz- bzw. Interpolationspunkte gewählt mit s als Normierungsfaktor (z.B. s = Gesamtlänge des von den Pi erzeugten Polygons).

2.9 Freiformkurven und -flächen – Splinekurven Zentripetale Parametrisierung Eine weitere Möglichkeit der Parameterwahl, welche die Struktur der Daten nachbildet, ist die so genannte zentripetale Parametri- sierung [Lee 1975]: Hier wird die zentripetale Beschleunigung näherungsweise minimiert. Sinnvoll sind auch Kombinationen dieser drei Typen. Eine Parametrisierung, die nicht nur Abstände, sondern auch noch Winkeländerungen in den Interpolationspunkten berücksichtigt, wurde von T. Foley entwickelt (siehe [Foley 1989]).

2.9 Freiformkurven und -flächen – Splinekurven

2.9 Freiformkurven und -flächen – B-Splines Basis Splines Bei der Konstruktion von Splines haben wir bisher polynomiale Basisfunktionen (z.B. Bernsteinpolynome) für die Darstellung der einzelnen Segmente betrachtet. Dies führt zur Konstruktion von Übergangsbedingungen an den Segmenttrennstellen. Ein eleganterer Ansatz zur Konstruktion von Splinekurven besteht darin, Ck-2-stetige Basisfunktionen aus mehreren Segmenten der Ordnung k zu konstruieren. Bei Verwendung dieser Basis Splines (B-Splines) entfallen die Übergangsbedingungen und es werden zudem weniger Kontrollpunkte (Koeffizienten) benötigt.

2.9 Freiformkurven und -flächen – B-Splines Beispiel: Quadratische B-Splinekurve mit Kontrollpunkten d0...d5. d2 D2 : D3 D3 : D4 d1 d3 d0 D5 : D4 d5 d4 t0=t1= t2 t3 t4 t5 t6= t7= t8 D2 D3 D4 D5

2.9 Freiformkurven und -flächen – B-Splines Eine offene B-Splinekurve der Ordnung k (vom Grad k-1) ist gegeben durch m+1 Kontrollpunkte d0,...,dm (de Boor-Punkte) und m+k+1 Knoten x0x1 ... .xm+k (Knotenvektor). Das Definitionsgebiet der B-Spline Kurve ist das Intervall [xk-1, xm+1], welches m-k+2 Segmente enthält. Die übrigen Knoten bestimmen das Verhalten der Kurve an den Rändern. Für das erste Splinesegment benötigt man k de Boor-Punkte, für jedes weitere Segment nur einen zusätzlichen de Boor-Punkt.

2.9 Freiformkurven und -flächen – B-Splines de Boor-Algorithmus Analog zum de Casteljau-Algorithmus für Bézier-Kurven ermöglicht der de Boor-Algorithmus die effiziente Auswertung von B-Splinekurven (ohne die einzelnen Segmente herzuleiten). Zu gegebenem Parameter t bestimmt man zunächst den Index r, so dass t  [xr , xr+1). Der zugehörige Punkt f ( t ) der Splinekurve wird dann aus den de Boor-Punkten dr-k+1,...,dr wie folgt ermittelt:

2.9 Freiformkurven und -flächen – B-Splines De Boor-Algorithmus Für t  [xr , xr+1) berechnet sich die B-Splinekurve aus mit Schema des de Boor-Algorithmus

2.9 Freiformkurven und -flächen – B-Splines De Boor-Algorithmus 1. Beispiel: k=4, m=4 m-k+2 = 2 polynomiale Segmente d1 d2 d3 d0 ... dm x0 x1 xk-1 xm+1 xm+k

2.9 Freiformkurven und -flächen – B-Splines De Boor-Algorithmus 1. Beispiel: k=4, m=4 1 d1 d2 d2 1 d3 d3 1 d4 d0 t  [x4 , x5)  r=4 dm x0 x1 xk-1 t xm+1 xm+k 1 a2 1 a3 1 a4

2.9 Freiformkurven und -flächen – B-Splines De Boor-Algorithmus 1. Beispiel: k=4, m=4 1 d1 d2 d2 2 d3 1 d3 2 d4 d3 1 d4 d0 dm x0 x1 xk-1 t xm+1 xm+k 2 a3 2 a4

2.9 Freiformkurven und -flächen – B-Splines De Boor-Algorithmus 1. Beispiel: k=4, m=4 1 d1 d2 d2 2 d3 1 d3 2 d4 3 f(t)=d4 d3 1 d4 d0 dm x0 x1 xk-1 t xm+1 xm+k 3 a4

2.9 Freiformkurven und -flächen – B-Splines dr-3 dr-2 2. Beispiel (k=5): dr-4 dr-1 ... dr t xr xr+1 Dr-3 Dr-2 Dr-1 Dr Dr+1 Dr+2 Dr+3

2.9 Freiformkurven und -flächen – B-Splines dr-3 dr-2 2. Beispiel (k=5): dr-4 dr-1 ... dr t xr xr+1 Dr-3 Dr-2 Dr-1 Dr Dr+1 Dr+2 Dr+3

2.9 Freiformkurven und -flächen – B-Splines dr-3 dr-2 2. Beispiel (k=5): dr-4 dr-1 ... dr t xr xr+1 Dr-3 Dr-2 Dr-1 Dr Dr+1 Dr+2 Dr+3

2.9 Freiformkurven und -flächen – B-Splines dr-3 dr-2 2. Beispiel (k=5): dr-4 dr-1 ... dr t xr xr+1 Dr-3 Dr-2 Dr-1 Dr Dr+1 Dr+2 Dr+3

2.9 Freiformkurven und -flächen – B-Splines dr-3 dr-2 3. Beispiel (k=5): Auswerten an einem Knoten dr-4 dr-1 ... dr t=xr xr+1 Dr-3 Dr-2 Dr-1 Dr Dr+1 Dr+2 Dr+3

2.9 Freiformkurven und -flächen – B-Splines dr-3 dr-2 3. Beispiel (k=5): Auswerten an einem Knoten dr-4 dr-1 ... dr t=xr xr+1 Dr-3 Dr-2 Dr-1 Dr Dr+1 Dr+2 Dr+3

2.9 Freiformkurven und -flächen – B-Splines dr-3 dr-2 3. Beispiel (k=5): Auswerten an einem Knoten dr-4 dr-1 ... dr t=xr xr+1 Dr-3 Dr-2 Dr-1 Dr Dr+1 Dr+2 Dr+3

2.9 Freiformkurven und -flächen – B-Splines Aus dem de Boor-Algorithmus ergeben sich die Basisfunktionen Ni,k(t) (B-Splines) zu den einzelnen de Boor-Punkten di (analog zu den Bernstein-Polynomen für Bézier-Kurven). [1] Rekursionsformel von de Boor und Cox sei eine nichtfallende Folge von Knoten.

2.9 Freiformkurven und -flächen – B-Splines Beispiel 1:  = {0,1,2,3,4}, k=1,...,3

2.9 Freiformkurven und -flächen – B-Splines

2.9 Freiformkurven und -flächen – B-Splines Beispiel 2:  ={0,0,0,1,2,3,4,4,4}, k=1,...,3

2.9 Freiformkurven und -flächen – B-Splines

2.9 Freiformkurven und -flächen – B-Splines

2.9 Freiformkurven und -flächen – B-Splines Mit Hilfe dieser Basis Splines erhalten wir nun folgende Darstellung: [2] Definition: B (Basis)-Splinekurven (a) Das Kontrollpolygon d0,...,dm, die Ordnung k (Grad k-1) und die m+k+1 Knoten x0x1 ... xm+k definieren eine offene B-Splinekurve, gegeben durch

2.9 Freiformkurven und -flächen – B-Splines Das Kontrollpolygon d0,...,dm, die Ordnung k (Grad k-1) und die m+2 Knoten x0x1 ... xm+1 definieren eine geschlossene B-Splinekurve, gegeben durch wobei die fehlenden Knoten periodisch ergänzt werden: Diejenigen B-Splines, welche aus dem Intervall [x0,xm+1] herausragen, müssen am jeweils anderen Rand des Intervalls angetragen werden.

geschlossene B-Splinekurve 2.9 Freiformkurven und -flächen – B-Splines Beispiel (k=3, m=4): ... x0 xm+1 ... Dm D0 ... Dm D0 ... d0 dk ... x0 xk-1 xm+1 xm+k d0 dm offene B-Splinekurve geschlossene B-Splinekurve

2.9 Freiformkurven und -flächen – B-Splines Bemerkungen: Jede Kontrollpunktänderung hat nur lokalen Einfluss. Bei offenen B-Splinekurven werden die Randpunkte d0 und dm interpoliert, wenn gilt: x0=...=xk-1 und xm+1=...=xm+k. Die Knoten x0 und xm+k haben keinen Einfluss auf den Kurvenverlauf. Die Trägerintervalle der B-Splines sind wie folgt definiert:

2.9 Freiformkurven und -flächen – B-Splines Satz: Convex-Hull und Variation-Diminishing Property (a) Jede Gerade schneidet eine ebene B-Splinekurve nicht öfter als das zugehörige B-Splinepolygon. (b) Die B-Splinekurve liegt in der konvexen Hülle des zugehörigen B-Splinepolygons. Genau genommen liegt jeder Kurvenpunkt in der konvexen Hülle von k lokalen Kontrollpunkten. Beweis: siehe [Lane:1983] Bemerkung: Liegen k aufeinander folgende Kontrollpunkte auf einer Geraden, so enthält auch die Kurve ein Geradensegment.

2.9 Freiformkurven und -flächen – B-Splines Man kann B-Splinekurven in Bézier-Segmente umwandeln, indem man die Vielfachheit aller Knoten durch sukzessives Knoteneinfügen auf k-1 erhöht. Die B-Splines degenerieren dadurch zu Bersteinpolynomen.

2.9 Freiformkurven und -flächen – NURBS NURBS (non-uniform rational B-splines) Wegen der geringeren Datenmenge empfiehlt es sich oft, die B-Splinedarstellung einzusetzen. NURBS sind rationale, nicht- uniforme B-Splines, die besonders im CAD-Bereich Anwendung finden: Knoten-Sequenz {x0 ,...., xn+k} Kontrollpunktmenge {d0 ,....,dn} Gewichtesequenz {w0 ,....,wn}

2.9 Freiformkurven und -flächen – Splineflächen Splineflächen sind aus mehreren Patches (Flächensegmenten) zusammengesetzt. An den Trennkurven der Patches sind gewisse Stetigkeitsbedingungen für glatte Übergänge einzuhalten.

2.9 Freiformkurven und -flächen – B-Splineflächen Aus dem Tensorprodukt der Darstellung für B-Splinekurven gewinnt man B-Splineflächen. Für die Definition einer B-Splinefläche benötigt man also - zwei Ordnungen k und l - de Boor Punkte dij (i=0,...,m; j=0,...,n) - zwei Knotenvektoren (x0, ..., xm+k) und (y0, ..., yn+l) B-Splineflächen können auch in eine oder beide Richtungen geschlossen sein (Zylindermantel, Torus).

2.9 Freiformkurven und -flächen – B-Splineflächen Die B-Spline-Darstellung ist erheblich kompakter als eine Darstellung der entsprechenden Patches. Die Parametrisierung ist durch die beiden Knotenvektoren festgelegt. yn+1 (Definitions- bereich) ... yl-1 xm+1 ... xk-1

2.9 Freiformkurven und -flächen – B-Splineflächen Die Auswertung einer B-Splinefläche f(s,t) erfolgt mit dem de Boor-Algorithmus. Zuerst wertet man für jede Zeile von de Boor-Punkten eine B-Splinekurve dj := fj (s) aus, welche dann die Kontrollpunkte einer Flächenkurve f(t) (s = konst.) liefert. Alternativ dazu kann man auch folgende Summe auswerten:

2.9 Freiformkurven und -flächen – Darstellung Darstellung von NURBS in OpenGL Erzeugung eines NURBS-Objekts und Rückgabe des Zeigers darauf: GLUnurbsObj* gluNewNurbsRenderer(void); Definition der NURBS-Eigenschaften void gluNurbsProperty(GLUnurbsObj* nurbs, // erzeugtes NURBS-Objekt GLenum property, // Eigenschaft GLfloat value // Eigenschaftswert );

2.9 Freiformkurven und -flächen – Darstellung NURBS-Eigenschaften und Eigenschaftswerte (Auswahl) Eigenschaft mögliche Werte GLU_SAMPLING_TOLERANCE value>0 GLU_DISPLAY_MODE GLU_FILL | GLU_OUTLINE_POLYGON | GLU_OUTLINE_PATCH GLU_CULLING GL_TRUE | GL_FALSE GLU_AUTO_LOAD_MATRIX GL_TRUE | GL_FALSE

2.9 Freiformkurven und -flächen – Darstellung Spezifikation eines Callbacks zur Fehlerbehandlung void gluNurbsCallback(GLUnurbsObj* nurbs, // erzeugtes NURBS-Objekt GLenum which, // Art des Callbacks: // GLU_ERROR void (*fn)(GLenum errorCode) // Funktionspointer des // Callbacks );

2.9 Freiformkurven und -flächen – Darstellung Beispiel einer Callback-Funktion void CALLBACK nurbsError(GLenum errorCode) { const GLubyte *estring; estring = gluErrorString(errorCode); fprintf (stderr, "Nurbs Error: %s\n", estring); exit (0); }

2.9 Freiformkurven und -flächen – Darstellung Spezifikation der NURBS- / B-Spline-Kurve Definition der NURBS-Eigenschaften void gluNurbsCurve(GLUnurbsObj* nurbs, // NURBS-Objekt GLint knotCount, // Knotenanzahl GLfloat *knots, // Knotenvektor GLint stride, // Offset zwischen // de Boor Punkten GLfloat *control, // de Boor Punkte GLint order, // Ordnung der // Kurve GLenum type // Typ der // darzustellenden // Kurve, z.B. // GL_MAP1_VERTEX3 // GL_MAP1_VERTEX4 );

2.9 Freiformkurven und -flächen – Darstellung Spezifikation der NURBS- / B-Spline-Fläche Definition der NURBS-Eigenschaften void gluNurbsSurface(GLUnurbsObj* nurbs, // NURBS-Objekt GLint uKnotNum, GLfloat* uknots, // Knotenvektor u GLint vKnotNum, GLfloat* vknots, // Knotenvektor v GLint ustride, GLint vstride // Offset zwischen // de Boor Punkten GLfloat *controlArray, // de Boor Punkte GLint uorder, GLint vorder // Ordnung der // Kurve GLenum type // Typ der // darzustellenden // Kurve, z.B. // GL_MAP1_VERTEX3 // GL_MAP1_VERTEX4 );

2.9 Freiformkurven und -flächen – Darstellung Darstellung der NURBS- / B-Spline-Kurve / -Fläche void gluBeginCurve(GLUnurbsObj* nurbs); gluNurbsCurve(........); void gluEndCurve(GLUnurbsObj* nurbs); bzw. void gluBeginSurface(GLUNnurbsObj* nurbs); gluNurbsSurface(........); void gluEndSurface(GLUnurbsObj* nurbs);

2.9 Freiformkurven und -flächen – Darstellung Darstellung von NURBS in OpenGL Löschen eines NURBS-Renderer-Objekts: void gluDeleteNurbsRenderer(GLUnurbsObj* nurbs);

Aufgabe Ergänzen Sie das Beispielprogramm surface.c von der Website um folgende Eigenschaften: - Ermöglichen Sie eine Navigation um die Fläche mit Hilfe der Maus - Ermöglichen Sie eine Modifikation einzelner Kontrollpunkte z.B. mit Hilfe der Tastatur (z.B. Springen von einem Kontrollpunkt zum anderen auf Tastendruck, Einfärben des jeweils aktiven Kontrollpunkts, Verschieben des Kontrollpunkts auf Tastendruck.)