(17) Kurven
Vorlesung
„Computergraphik I“
S. Müller
OpenGl-Pipeline
1
2
3
4
Kurven: Motivation 1
Bisher haben wir die Objekte der Welt – oder genauer deren Oberflächen – durch Dreiecke bzw. Polygone angenähert.
Oftmals benötigt man aber kompliziertere Kurven oder Flächen
Schriftzeichen Automobilbau
Kurven: Motivation 2
Gegeben ist eine Menge von Punkte (z.B. Messwerte)
x y
x y
Interpolation Approximation
Kurvenbeschreibung
Implizit
(unbekannte Lösungsmenge)
Explizit
(eingeschränkter Def.bereich)
Parametrisch
(flexibel und einfach handhabbar)
x y
r t
2 2
2
y r
x + =
2
0
2
2
+ y − r = x
2
2
x
r y = ± −
( ) t = r ⋅ cos ( ) t , y ( ) t = r ⋅ sin ( ) t , t ∈ [ 0 , 2 π ]
x
Simples Beispiel (2D)
Lineare Interpolation zwischen 2 Punkten, parametrische Darstellung
( ) ( t = 1 − t ) P
0+ t ⋅ P
1, t ∈ [ 0 , 1 ] P
P
0P
1) 1 ( − t
t
)
(t
P
Simple Beispiele (3D)
Interpolation einer Fläche durch bilineare Patches
( ) ( ) ( )
( ) ( )
( ) ( )
( ) ( )
2
01 11
10 00
] 1 , 0 [ ) , (
1
1 1 1
,
∈
⋅
⋅
− +
⋅
⋅ +
⋅
−
⋅ +
⋅
−
⋅
−
=
v u
P v
u
P v
u
P v
u
P v
u v
u P
P
00P
10P
11P
01u
v
De Casteljau Algorithmus
+
+
+
=
= 0 1 1 2
2 1 2
1 2 1 2
1 2
1 2 1 2
1 P P P P
t P
+
+
+
=
= 0 1 1 2
4 1 4
3 4 1 4
1 4
3 4 3 4
1 P P P P
t P
+
+
+
=
= 0 1 1 2
4 3 4
1 4 3 4
3 4
1 4 1 4
3 P P P P
t P
( ) (
t 1 t) ( (
1 t)
P0 t P1)
t( (
1 t)
P1 t P2)
P = − − ⋅ + ⋅ + ⋅ − ⋅ + ⋅
P
0P
24
P
1P
12
P
14
P
3Verallgemeinerung liefert eine appoximierte Parameterkurve
(
t 0)
P0P = =
(
t 1)
P2P = =
Quadratische Bézier-Kurven
Damit haben wir die quadratischen Bézier-Kurven hergeleitet.
Prinzip:
Gegeben sind 3 Punkte („Kontrollpunkte“)
Damit haben wir ein einfaches Verfahren, wie eine
parametrisierte Kurve durch die Punkte approximiert wird
Die Kurve geht durch Anfangs- und Endpunkt
( ) (
t 1 t) ( (
1 t)
P0 t P1)
t( (
1 t)
P1 t P2)
P = − − ⋅ + ⋅ + ⋅ − ⋅ + ⋅
( ) ( ) ( )
22 1
0
2
2 1
1 t P t t P t P
t
P = − ⋅ + ⋅ ⋅ − ⋅ + ⋅
Umformung liefert:
Standardform der quadratischen Bézier-Kurven
Gewichtungssfunktionen
Für jeden Wert von t im Bereich [0,1] wird eindeutig ein Punkt P definiert
„Abhängig vom Wert von t nimmt man ein bisschen von P
0, von P
1und schließlich von P
2“
Gewichtungsfunktionen
Positiv
Summe der
Gewichtungsfunktionen für jedes t gleich 1
( ) ( ) ( )
22 1
0
2
2 1
1 t P t t P t P
t
P = − ⋅ + ⋅ ⋅ − ⋅ + ⋅
t2
(
t)
t⋅ −
⋅ 1
2
(
1− t)
2t
0 1
1
0
Interpretation
P
0P
24
P
1P
12
P
14
P
3 t2(
1)
22⋅t⋅ − t
(
1− t)
2t
0 1
1
0
( ) ( ) ( )
22 1
0
2
2 1
1 t P t t P t P
t
P = − ⋅ + ⋅ ⋅ − ⋅ + ⋅
Gewicht von P0
Gewicht von P1
Gewicht von P2
Tangente an Start-/Endpunkt
( ) ( ) ( )
22 1 0
2 2 1
1 t P t t P t P
t
P = − ⋅ + ⋅ ⋅ − ⋅ + ⋅
( )
2(
1)
0 2(
1 2)
1 2 2' t t P t P t P
P = ⋅ − ⋅ + ⋅ − ⋅ + ⋅
( )
2(
1 0)
' : 0
P P t
P t
−
⋅
=
= '
( )
2(
2 1)
1
P P
t P t
−
⋅
=
=
P
0P
2P
1Tangente in P0: Tangente in P2:
Ergebnis: die Richtungen der Tangenten an Start-/Endpunkt sind durch die
(Tangenten hier aus Platzgründen zu kurz gezeichnet, in der Zeichnung soll nur die Richtung verdeutlicht werden ….)
Eigenschaften der Bézier-Kurven
1.
Konvexe Hülle
Die Kurve liegt innerhalb der konvexen Hülle der
Kontrollpunkte
1.
Start-/Endpunkte
… liegen auf der Kurve
1.
Tangenten
… an Start-/Endpunkten
sind durch die Verbindungen erster/zweiter bzw.
vorletzter/letzter
Kontrollpunkt festgelegt.
P
0P
2P
1Kubische Bézier-Kurven
P
0P
21 ,
P
0P
12 ,
P
0) (t P
P
31 ,
P
2 1,
P
12 ,
P
1) (t P
1 ,
P
01 ,
P
2 1,
P
12 ,
P
02 ,
P
15 .
= 0
t P
0P
2P
1P
325 .
= 0 t
( ) ( t 1 t )
3P 3 ( 1 t )
2t P 3 ( 1 t ) t
2P t
3P
P = − ⋅ + − ⋅ + − ⋅ + ⋅
Kubische Bézier-Kurven
Bei 4 Kontrollpunkten ergeben sich
Gewichtungsfunktionen 3.
Grades (kubische Bézier- Kurven)
Allgemein: die Anzahl der Kontrollpunkte legt den Grad der Polynome fest (Grad der Polynome ist Anzahl der
Kontrollpunkte minus 1)
Alle anderen Eigenschaften gelten auch hier:
1. Die Kurve liegt innerhalb der konvexen Hülle der Kontrollpunkte
2. Start-/Endpunkte liegen auf der Kurve
3. Tangenten an Start-/Endpunkten sind durch die Verbindungen erster/zweiter bzw. vorletzter/letzter Kontrollpunkt festgelegt.
t3
(
1)
23t − t
(
1− t)
3t
0 1
1
0
(
t)
t 1− 3 2
kurve_bezier.vcproj
P1
P1
P1
P1 P1
P1
P0 P0 P0
P P2
P2 P2
P2 P2
P3
P3
P P3
Beispiel: Powerpoint
Bernstein-Polynome
Bézier-Kurven lassen sich allgemein auch so darstellen
Grad n des Polynoms = Anzahl Kontrollpunkte – 1
n = 2:
n = 3:
Allgemein: „Bernstein- Polynome“
( ) ∑ ( )
=
⋅
=
ni
i n
i
t P
B t
P
0 ,
( )
( )
2 2 , 2
2 , 1
2 2
, 0
1 2
1 t B
t t
B
t B
=
−
⋅
⋅
=
−
=
( )
( )
( )
3 3 , 3
2 3
, 2
2 3
, 1
3 3
, 0
1 3
1 3
1
t B
t t
B
t t B
t B
=
−
=
−
=
−
=
( )
n ii n
i
t t
i
B n ⋅ ⋅ −
−
= 1
,
( n ! )
n
= −
Zusammenfassung
Bézier-Kurven sind eine Möglichkeit, stetige Kurven aus eine Menge von
Kontrollpunkten zu generieren
Als Gewichtungsfunktionen werden Bernstein-Polynome verwendet
Grad n des Polynoms = Anzahl Kontrollpunkte – 1
Eigenschaften der Bézier- Kurven
1. Die Kurve liegt innerhalb der konvexen Hülle der Kontrollpunkte
2. Start-/Endpunkte liegen auf der Kurve
3. Tangenten an Start-/Endpunkten sind durch die Verbindungen erster/zweiter bzw. vorletzter/letzter Kontrollpunkt festgelegt.
Eigenschaften der Bernstein- Polynome
1. Im Wertebereich t∈[0,1] positiv
2. Die Summe der Werte für alle t im Wertebereich ist 1.
( ) ∑ ( )
=
⋅
=
ni
i n
i
t P
B t
P
0 ,
( )
n ii n
i
t t
i
B n ⋅ ⋅ −
−
= 1
,
∑
n B( )
t = 1 ∀ t∈ [0,1]Subdivision (Unterteilung)
Gegeben seien die
Liniensegmente (rechts)
Man unterteilt jede Kante (z.B. P
0P
1und P
1P
2) z.B. in 2 gleiche Teile
Die neue Kante (P
0,1P
1,1) wird ebenfalls in der Mitte
unterteilt und ein neuer Punkt P generiert
Das ganze wird für die neuen Kanten rekursiv wiederholt.
Das Ergebnis ist eine
P
0P
1P
21 ,
P
01 ,
P
1P
subdivide (rek, p0, p1, p2) {
if (rek >= max_rek) {
Zeichne Linien (p0, p1, p2);
Abbruch;
}
p01 = (p0+p1)/2.0;
P
0P
1P
21 ,
P
01 ,
P
1P
P
0P
1P
21 ,
P0
1 ,
P1
P
P
2P
01 ,
P0 1,1
P
P
1P
Beispiel
1. Rekursion:
2. Rekursion:
kurve_subdiv.vcproj Was passiert mit der Kurve, wenn wir die
Halbierung/Drittelung ?
Halbierung
Mathematisch: 1. Rekursion
P
0P
1P
21 ,
P
01 ,
P
1P
(
0 1)
1 ,
0
2
1 P P
P = +
(
1 2)
1 ,
1
2
1 P P
P = +
( )
+
+
+
=
+
=
2 1
1 0
1 , 1 1
, 0
2 1 2
1 2 1 2
1 2
1 2 1 2 1
P P
P P
P P
P
Mathematisch: 2. Rekursion (links)
P
0 1 ,P
0P
2Pa
Pb
4
P1
2
P
1P
1( )
+
+
+
=
+ + + +
=
+
=
2 1
1 0
2 1
0 1
0
1 3
1 1
3 3
8 1 8
4 8
3 4
1 4
3 2 1 2 1
P P
P P
P P
P P
P P P
P a b
( )
( )
1 0
1 0 0
1 , 0 0
4 1 4
3
2 1 2
1 2 1
P P
P P P
P P Pa
+
=
+ +
=
+
=
( )
( )
2 1
0
2 1
1 0
1 0
2 1 1 , 0
8 1 8
4 8
3
2 1 2
1 2 1 2
1 2
1 2 1 2
1 2 1 2 1
P P
P
P P
P P
P P
P P
Pb
+ +
=
+
+
+
+ +
=
+
=
Was sagt uns das ?
P
0 1 ,P
0P
2P
aP
b4
P
12
P
1P
1P
0P
24 ) ( t = 1 P
P
1
+
+
+
= 0 1 1 2
4
1 4
1 4
3 4 1 4
1 4
3 4
3 P P P P
P
) 1 ( − t
t
) 1
( − t t
) 1 ( − t
t
Durch diesen Rekursionsschritt erzeugen wir den gleichen Wert wie für t=1/4.