Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
(10) Splines
VorlesungC t fik“„Computergrafik“
T. Grosch
Kurven: Motivation 1Kurven: Motivation 1
Bisher haben wir die Objekte der Welt – oder genauerBisher haben wir die Objekte der Welt – oder genauer deren Oberflächen – durch Dreiecke bzw. Polygone angenähert.gOftmals benötigt man aber kompliziertere Kurven oder Flächen
Schriftzeichen Automobilbau
T. Grosch - 2 -
Kurven: Motivation 2Kurven: Motivation 2Gegeben ist eine Menge von Punkten (z B Messwerte)Gegeben ist eine Menge von Punkten (z.B. Messwerte)
yvyv
xvxv
Interpolation Approximation
T. Grosch - 3 -
KurvenbeschreibungKurvenbeschreibungImplizit
yv
Implizit
xvrt
222 ryx =+
0222 + ryx(unbekannte Lösungsmenge)
Explizit
x0=−+ ryx
Explizit
(eingeschränkter Def.bereich)
22 xry −±=
Parametrisch
( ) ( ) ( ) ( ) ]2,0[,sin,cos π∈⋅=⋅= ttrtytrtx
(flexibel und einfach handhabbar)
( ) ( ) ( ) ( ) ]2,0[,sin,cos π∈ttrtytrtx
T. Grosch - 4 -
Simples Beispiel (2D)Simples Beispiel (2D)
Lineare Interpolation zwischen 2 PunktenLineare Interpolation zwischen 2 Punkten, parametrische Darstellung
( ) ( ) ]1,0[,1 10 ∈⋅+−= tPtPttP
1P
)1( t
t
0P )1( t−
)(tP
T. Grosch - 5 -
Simple Beispiele (3D)Simple Beispiele (3D)Interpolation einer Fläche 01PInterpolation einer Fläche durch bilineare Patches
Zuerst Interpolation über u
01
( )′
P ′′
Dann über v
11Pv( )( ) 1101
1000
11
PuPuPPuPuP⋅+⋅−=′′⋅+⋅−=′
Dann über v
Z f t
( ) PvPvvuP ′′⋅+′⋅−= 1),(
Zusammengefasst( ) ( ) ( )
( ) ( ) 10
00
111,
⋅−⋅+⋅−⋅−=PvuPvuvuP
00P 10PuP′
( ) ( )( ) ( )
2
01
11
]10[)(
1
∈
⋅⋅−+⋅⋅+
vu
PvuPvu
]1,0[),( ∈vu
T. Grosch - 6 -
Subdivision (Unterteilung)Subdivision (Unterteilung)Gegeben seien die
1P 2P1,1PGegeben seien die Liniensegmente (rechts)Man unterteilt jede Kante ( B P P d P P ) B i 2 P
P(z.B. P0P1 und P1P2) z.B. in 2 gleiche TeileDie neue Kante (P0 1P1 1) wird
1,0P
( 0,1 1,1)ebenfalls in der Mitte unterteilt und ein neuer Punkt P generiert
0Psubdivide (rek, p0, p1, p2)P generiert
Das ganze wird für die neuen Kanten rekursiv wiederholt.
{if (rek >= max_rek){
Zeichne Linien (p0, p1, p2);Abbruch;
Das Ergebnis ist eine geglättete Kurve
;}p01 = (p0+p1)/2.0; p11 = (p1+p2)/2.0; p = (p01+p11)/2.0subdivide(rek+1 p0 p01 p);subdivide(rek+1, p0, p01, p);subdivide(rek+1, p, p11, p2);
}
T. Grosch - 7 -
Beispiel1P 2P1,1P
Beispiel
1,0PP
1. Rekursion:
0P
2P
P2P
10P1,1P
1P
P2 Rekursion:
1P
10P
1,1P
P
0P1,02. Rekursion:
0P
1,0P
T. Grosch - 8 -
Wiederholte HalbierungWiederholte Halbierung
Was passiert mit der Kurve, wenn wir die Kanten nicht halbieren sondern dritteln ?
T. Grosch - 9 -
Halbierung/Drittelung ?Halbierung/Drittelung ?
HalbierungHalbierung
Drittelungdi l i h K
g…die gleiche Kurve
T. Grosch - 10 -
Mathematisch: 1 RekursionMathematisch: 1. Rekursion
1P 2P11P ( )1 PPP1P 2P1,1
P
( )101,0 21 PPP +=
11,0P
P( )211,1 2
1 PPP +=
0P ( )+= 1,11,021 PPP
⎟⎠⎞
⎜⎝⎛ ++⎟
⎠⎞
⎜⎝⎛ += 2110 2
121
21
21
21
21 PPPP
T. Grosch - 11 -
Mathematisch: 2 Rekursion (links)Mathematisch: 2. Rekursion (links)2P1P( )1 PPP
10P
2
bP21P
1( )
( )100
1,00
21
212
PPP
PPPa
⎟⎠⎞
⎜⎝⎛ ++=
+=
P
1,0
aP41P
10 41
43
22
PP +=
⎠⎝
0P
( )+=1 PPP b
( )211,021 PPPb +=
( )
⎟⎠⎞
⎜⎝⎛ ++++=
+
21010 81
84
83
41
43
212
PPPPP
PPP ba
( ) 211010
14321
21
21
21
21
21
21
21 PPPPPP ⎟
⎠⎞
⎜⎝⎛
⎟⎠⎞
⎜⎝⎛ ++⎟
⎠⎞
⎜⎝⎛ +++=
⎟⎠⎞
⎜⎝⎛ ++⎟
⎠⎞
⎜⎝⎛ += 2110 4
143
41
41
43
43 PPPP210 8
184
83 PPP ++=
T. Grosch - 12 -
Was sagt uns das ? ⎟⎠⎞
⎜⎝⎛ ++⎟
⎠⎞
⎜⎝⎛ += 211041
131133 PPPPPWas sagt uns das ?
PP PP
⎟⎠
⎜⎝
⎟⎠
⎜⎝ 211041 444444
2P
P
1P 2P1P )1( t− t
1,0PbP
P
21P)
41( =tP
t t
aP41P )
4(
)1( t−
)1( t−
0P0P
Durch diesen Rekursionsschritt erzeugen wir den gleichen Wert wie für t=1/4.
T. Grosch - 13 -
Genauere BetrachtungGenauere Betrachtung
⎟⎞
⎜⎛
⎟⎞
⎜⎛
⎟⎞
⎜⎛ 1111111 2P1P
⎟⎠⎞
⎜⎝⎛ ++⎟
⎠⎞
⎜⎝⎛ +=⎟
⎠⎞
⎜⎝⎛ = 2110 2
121
21
21
21
21
21 PPPPtP
⎞⎛⎞⎛⎞⎛ 1311331 21P43P
⎟⎠⎞
⎜⎝⎛ ++⎟
⎠⎞
⎜⎝⎛ +=⎟
⎠⎞
⎜⎝⎛ = 2110 4
143
41
41
43
43
41 PPPPtP
Analog für 2 Rekursion (rechts):41P
21
⎟⎠⎞
⎜⎝⎛ ++⎟
⎠⎞
⎜⎝⎛ +=⎟
⎠⎞
⎜⎝⎛ = 2110 4
341
43
43
41
41
43 PPPPtP
Analog für 2. Rekursion (rechts):
0P ( )⎠⎝⎠⎝⎠⎝ 4444444 0
Verallgemeinerung liefert eine appoximierte Parameterkurve
( ) 00 PtP ==
( ) 21 PtP ==
( ) ( ) ( )( ) ( )( )2110 111 PtPttPtPtttP ⋅+⋅−⋅+⋅+⋅−−=
T. Grosch - 14 -
Quadratische Bézier-KurvenQuadratische Bézier-Kurven
Damit haben wir die quadratischen Bézier-KurvenDamit haben wir die quadratischen Bézier-Kurven hergeleitet.Prinzip:Prinzip:
Gegeben sind 3 Punkte („Kontrollpunkte“)Damit haben wir ein einfaches Verfahren, wie eine parametrisierte Kurve durch die Punkte approximiert wirdDie Kurve geht durch Anfangs- und Endpunkt
( ) ( ) ( )( ) ( )( )2110 111 PtPttPtPtttP ⋅+⋅−⋅+⋅+⋅−−=
Umformung liefert:
( ) ( ) ( ) 22
102 121 PtPttPttP ⋅+⋅−⋅⋅+⋅−=
Standardform der quadratischen Bézier-KurvenStandardform der quadratischen Bézier Kurven
T. Grosch - 15 -
GewichtungsfunktionenGewichtungsfunktionen( ) ( ) ( ) 2
210
2 121 PtPttPttP ⋅+⋅−⋅⋅+⋅−=
Für jeden Wert von t im Bereich [0,1] wird eindeutig i P kt P d fi i t
1ein Punkt P definiert„Abhängig vom Wert von t nimmt man ein bisschen von
2t
( )tt 12
( )21 t−
P0, von P1 und schließlich von P2“Gewichtungsfunktionen
( )tt −⋅⋅ 12
GewichtungsfunktionenPositivSumme der G f f
t0 1
0Gewichtungsfunktionen für jedes t gleich 1
1
T. Grosch - 16 -
InterpretationInterpretation
Gewicht von P0 Gewicht von P2
2P1P1
Gewicht von P0
Gewicht von P1
Gewicht von P2
21P43P 2t
( )12 tt
( )21 t−
41P( )212 tt −⋅⋅
0P t0 1
00 0 1
( ) ( ) ( ) 22
102 121 PtPttPttP ⋅+⋅−⋅⋅+⋅−=
T. Grosch - 17 -
Tangente an Start-/EndpunktTangente an Start-/Endpunkt
PP( ) ( ) ( ) 22
102 121 PtPttPttP ⋅+⋅−⋅⋅+⋅−= 2P1P
( ) ( ) ( ) 210 221212' PtPtPttP ⋅+⋅−⋅+⋅−⋅=
(Tangenten hier aus Pl t ü d k
:0t = 1t =
Tangente in P0: Tangente in P2:Platzgründen zu kurz gezeichnet, in der Zeichnung soll nur die Richtung verdeutlicht
d )
( ) ( )012':0
PPtPt
−⋅==
( ) ( )122'1
PPtPt
−⋅==
0Pwerden ….)
Ergebnis: die Richtungen der Tangenten an Start-/Endpunkt sind durch die Verbindungen erster/zweiter bzw. vorletzter/letzter Kontrollpunkt festgelegt.
T. Grosch - 18 -
Eigenschaften der Bézier-KurvenEigenschaften der Bézier-Kurven1 Konvexe Hülle PP1. Konvexe Hülle
Die Kurve liegt innerhalb der konvexen Hülle der Kontrollpunkte
2P1P
Kontrollpunkte2. Start-/Endpunkte
… liegen auf der Kurve3. Tangenten
… an Start-/Endpunkten sind durch diesind durch die Verbindungen erster/zweiter bzw. vorletzter/letzter Kontrollpunkt festgelegt.
0Pp g g
4. Variation Diminishing PropertyDie Anzahl der Schnittpunkte einer Gerade mit dem Kontrollpolygon ist nie kleiner als die Anzahl der Schnittpunkte mit der Kurve
T. Grosch - 19 -
Anzahl der Schnittpunkte mit der Kurve (ohne Beweis)
Kubische Bézier-KurvenKubische Bézier-Kurven
P P2P1P
20P
1,1P
21PP
1,1P
P
2P1P
10P
2,0
)(tP12P
2,1
)(tP
1,2P2,1P
1,0P
P
1,2P
1,0P 2,0P
P0P 3P
5.0=t 0P 3P25.0=t
( ) ( ) ( ) ( ) 33
22
12
03 13131 PtPttPttPttP ⋅+⋅−+⋅−+⋅−=
T. Grosch - 20 -
Kubische Bézier-KurvenKubische Bézier-KurvenBei 4 Kontrollpunkten 3t( )31 t−
1Bei 4 Kontrollpunkten ergeben sich Gewichtungsfunktionen 3. Grades (kubische Bézier
t
( )213 tt −
( )1 t−
( )tt −13 2Grades (kubische Bézier-Kurven)Allgemein: die Anzahl der
( )13 tt ( )tt 13
Kontrollpunkte legt den Grad der Polynome fest (Grad der Polynome ist Anzahl der
1 Die Kurve liegt innerhalb der konvexen
t0 1
0
yKontrollpunkte 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 Kurve3 Tangenten an Start /Endpunkten sindgelten auch hier: 3. Tangenten an Start-/Endpunkten sind
durch die Verbindungen erster/zweiter bzw. vorletzter/letzter Kontrollpunkt festgelegt.
T. Grosch - 21 -
1P 1P2P 2P
1P
1P 1P
0P 0P 0P2P
2P 2P
3P
3P1 12 23P
1P0P 0P
0P2P 3P 3P4P
T. Grosch - 22 -
Bernstein-PolynomeBernstein-PolynomeBézier-Kurven lassen sich n = 3: ( )330 1 tB −=Bézier Kurven lassen sich allgemein auch so darstellen
n 3:
( ) ( )∑n
( )( )( )2
32
23,1
3,0
13
13
1
ttB
ttB
tB
−=
−=
Grad n des Polynoms = All i B t i
( ) ( )∑=
⋅=i
ini PtBtP0
,
( )3
3,3
3,2
tB =
Grad n des Polynoms = Anzahl Kontrollpunkte – 1
Allgemein: „Bernstein-Polynome“
n⎞⎛n = 2: ( )( )2,1
22,0
121
ttBtB−⋅⋅=
−= ( ) inini tt
in
B −−⋅⋅⎟⎠
⎞⎜⎝
⎛= 1,
⎞⎛22,2 tB =
( )!!!
inin
in
−=⎟
⎠
⎞⎜⎝
⎛
10!0 0 ==
T. Grosch - 23 -
ZusammenfassungZusammenfassungBézier-Kurven sind eine Grad n des Polynoms = AnzahlBézier Kurven sind eine Möglichkeit, stetige Kurven aus eine Menge von Kontrollpunkten zu
Grad n des Polynoms Anzahl Kontrollpunkte – 1Eigenschaften der Bézier-KKontrollpunkten zu
generierenKurven
1. Die Kurve liegt innerhalb der konvexen Hülle der Kontrollpunkte
2 Start-/Endpunkte liegen auf der Kurve( ) ( )∑ ⋅=n
ii PtBtP
Als Gewichtungsfunktionen werden Bernstein-Polynome
2. Start /Endpunkte liegen auf der Kurve3. Tangenten an Start-/Endpunkten sind
durch die Verbindungen erster/zweiter bzw. vorletzter/letzter Kontrollpunkt festgelegt
( ) ( )∑=i
ini PtBtP0
,
werden Bernstein-Polynome verwendet
festgelegt.
Eigenschaften der Bernstein-Polynome
( ) ini ttn
B −⎟⎞
⎜⎛ 1 1. Im Wertebereich t∈[0,1] positiv
2. Die Summe der Werte für alle t im Wertebereich ist 1.
( )ni tti
B −⋅⋅⎟⎠
⎜⎝
= 1,
( )∑n
( )∑=
∈∀=i
ni ttB0
, ]1,0[1
T. Grosch - 24 -
Rekursive Darstellung ( ) ( )∑ ⋅=n
ii PtBtPRekursive Darstellung
Die Bernstein-Polynome lassen sich sehr gut rekursiv
( ) ( )∑=i
ini PtBtP0
,
( )1 + BtBtB
Die Bernstein-Polynome lassen sich sehr gut rekursiv definieren
( ) 1,11,, 1 −−− ⋅+⋅−= ninini BtBtB
( )22,0 1 tB −=
( )33,0 1 tB −=( )t−1
t
( )ttB −⋅⋅= 122,1
( )23,1 13 ttB −=( )tB −= 11,0
10,0 =B ( )t−1
t
( )t−1
t( )t−1
t,
222 tB =
( )ttB −= 13 23,2tB =1,1
, t
( )t−1
t
t
( )t−12,2 tB
33,3 tB =
t
Lineare Interpolation einer linearen Interpolation einer…Lineare Interpolation einer linearen Interpolation einer…
T. Grosch - 25 -
Rekursive Berechnung (de Casteljau)Rekursive Berechnung (de Casteljau)Genauso lassen sich die Dieser Algorithmus von deGenauso lassen sich die Punkte auf der Kurve sehr gut rekursiv berechnen
Dieser Algorithmus von de Casteljau ist nichts anderes, als das bereits hergeleitete VerfahrenVerfahren
( ) 1,11,, 1 −+− ⋅+⋅−= kikiki PtPtP00P
02P01P 1,1P
1,0P0,0
PP( )t−1
( )t−1
t
0,2P0,1P2,0P
1,1
2,1P
1,1P0,1P
P
2,0P
P
( ) 3,0PtP =( )t−1
t
t
( )t−1
( )t−1
t 1,0P)(tP
1,2P
1,2P
0,2P
P
2,1Pt ( )t−1
t00P 0,3P
500,3P 0,0 5.0=tT. Grosch - 26 -
Implementierung de CasteljauImplementierung de CasteljauRekursiv IterativRekursivDe-casteljau( anz, P[], t){If (anz<2)
IterativDe-casteljau( anz, P[], t){for (n = anz-2; n >= 0; n--)
return;for (i = 0; i < anz-1; i++)
P[i] = (1-t)*P[i]+t*P[i+1];De casteljau( anz 1 P[] t);
for (i = 0; i <= n; i++)P[i] = (1-t)*P[i]+t*P[i+1];
} /*Rückgabewert in P[0]*/De-casteljau( anz-1, P[], t);} /*Rückgabewert in P[0]*/
…
0,2P0,1P20P
1,1P
21Pfor (i=0; i < 100; i++)
De-casteljau( 4, P, i/100.0);
1,0P
2,0
)(tP1,2P
2,1
Alternativer Abbruch zur vordefinierten Anzahl von Punkten: schlaue Routine „isflat“
P 03P0,0P 0,3
5.0=tT. Grosch - 27 -
ImplementierungImplementierungEntweder durch rekursiveEntweder durch rekursive Unterteilung
Ergebnis sind Punkte für t-Werte bei Vielfachen von 1/2i
Oder durch de Casteljau…
0,2P0,1P 1,1P
2,0P
)(tP
2,1PAuswertung der Kurve mit konstantenAbständen für t
Die Abstände der 2D Punkte sind nicht gleichAutomatisch kürzerer Abstand bei stärkerer Krümmung
1,0P)(
1,2P
0,0P 0,3P5.0=t .
T. Grosch - 28 -
Splines und StetigkeitenSplines und StetigkeitenStetigkeit zwischen
SplinesDer Begriff kommt aus dem
Stetigkeit zwischen parametrischen Kurven
C0 = G0 = gleicher PunktP t i h St ti k it C1g
Schiffbau und bezeichnet eingespannte Holz-/Metallplanken
Parametrische Stetigkeit C1
• Tangentialvektoren sind identischp
„Spline Kurven sind eine Familie von Funktionen, die aus einer Menge von
Geometrische Stetigkeit G1
• Nur gleiche Richtung der Tangentialvektoreng
Kontrollpunkten „weiche“ (smooth) Kurven generieren“smooth: stetig in allen
gDie Bézier-Kurven gehören zur Familie der Splines und werden manchmal auchsmooth: stetig in allen
Ableitungen„stückweise polynomielle Funktionen“
werden manchmal auch Bézier-Splines genannt.
Funktionen
T. Grosch - 29 -
KurvenKurvenIn der Regel werden Zur Bestimmung der ParameterIn der Regel werden Polynome 3. Grades zur Annäherung von Kurven verwendet da das Auge C0
Zur Bestimmung der Parameter werden Bedingungen an die Endpunkte, Tangenten Vektoren oder Stetigkeitenverwendet, da das Auge C0,
C1 und ev. C2-Stetigkeiten für „weiche Kurven“ fordert.
Vektoren oder Stetigkeiten zwischen Kurvensegmenten verwendet.
Allgemein lässt sich unser Problem dann so schreiben:
( ) ( ) ( ) ( )[ ]tztytxtP =
( )( ) 23
23
+++=
+++=
dtctbtaty
dtctbtatx
yyyy
xxxx
( ) ( ) ( ) ( )[ ]y ( )( ) 10;23 ≤≤+++= tdtctbtatz
y
zzzz
yyyy
T. Grosch - 30 -
Parametrische Kurven IParametrische Kurven I
Mit Hilfe von T ( Monombasis“) und derMit Hilfe von T („Monombasis ) und der Koeffizientenmatrix C
⎟⎟⎞
⎜⎜⎛ zyx
bbbaaa
[ ] 10;123 ≤≤= ttttT⎟⎟⎟⎟
⎜⎜⎜⎜=
zyx
zyx
dddcccbbb
C
lässt sich das Gleichungssystem auch so darstellen:
⎟⎠
⎜⎝ zyx ddd
lässt sich das Gleichungssystem auch so darstellen: ( )( )
xxxx
db
dtctbtatx +++=23
23 ( ) ( ) ( ) ( )[ ]CT
tztytxtP =
( )( ) zzzz
yyyy
dtctbtatz
dtctbtaty
+++=
+++=23
23 CT ⋅=
T. Grosch - 31 -
Parametrische Kurven IIParametrische Kurven II
Mit C = M·G erhält man schließlichMit C = M G erhält man schließlich
( ) ( ) ( ) ( )[ ] GMTCTtztytxtP ⋅⋅=⋅==
⎟⎞
⎜⎛
⎟⎞
⎜⎛ 114131211 Gmmmm
(eigentlich: )
[ ]⎟⎟⎟⎟
⎜⎜⎜⎜⋅⎟⎟⎟⎟
⎜⎜⎜⎜⋅=
3
2
1
34333231
24232221
14131211
23 1GG
mmmmmmmm
ttt⎟⎟⎟⎟⎟⎞
⎜⎜⎜⎜⎜⎛
zyx
zyx
zyx
ggggggggg
333
222
111
(eigentlich: )
⎟⎟⎠
⎜⎜⎝
⎟⎟⎠
⎜⎜⎝ 4
3
44434241
34333231
Gmmmm⎟⎟⎠
⎜⎜⎝ zyx
y
ggg 444
TMonombasisvektor
MBasismatrix
GGeometrievektor
T. Grosch - 32 -
Beispiel: BézierBeispiel: BézierDer Geometrievektor besteht aus den 4 KontrollpunktenDer Geometrievektor besteht aus den 4 Kontrollpunkten
Jeder Kontrollpunkt als Zeilenvektor
⎟⎞
⎜⎛ 0P
⎟⎞
⎜⎛ −− 1331
⎟⎟⎟⎟⎟
⎜⎜⎜⎜⎜
=2
1
PP
G
⎟⎟⎟⎟⎞
⎜⎜⎜⎜⎛
−−
=00330363
M
⎟⎟⎠
⎜⎜⎝ 3
2
P⎟⎟⎠
⎜⎜⎝ 0001
0033
⎟⎞
⎜⎛
⎟⎞
⎜⎛ −− 01331 P
( ) [ ]⎟⎟⎟⎟⎟⎞
⎜⎜⎜⎜⎜⎛
⋅
⎟⎟⎟⎟⎟⎞
⎜⎜⎜⎜⎜⎛
−−
⋅=2
1
0
23
003303631331
1PP
ttttPDie Spalten der Basismatrix Menthalten die Koeffizienten der
Bernstein-Polynome(in Monom-Form), z.B.⎟⎟
⎠⎜⎜⎝
⎟⎟⎠
⎜⎜⎝ 30001 P
( ) ( ) ( ) ( ) 33
22
12
03 13131 PtPttPttPttP +−⋅⋅+−⋅⋅+−=
( ),( ) 1331 233 +−+−=− tttt
T. Grosch - 33 -
Hermite-KurvenHermite-Kurven
Die Kurve wird gesteuert durch Start- und Endpunkt PDie Kurve wird gesteuert durch Start- und Endpunkt P0und P1, sowie deren Tangentenvektoren d0 und d1
⎟⎟⎟⎟⎞
⎜⎜⎜⎜⎛
= 1
0
dPP
GH ?=HM
0dv
(Tangenten hier aus Platzgründen zu kurz gezeichnet, in der Zeichnung soll nur die
⎟⎟⎠
⎜⎜⎝ 1
0
dd
P 1P
Richtung verdeutlicht werden ….)
0P 1
dv
1d
T. Grosch - 34 -
Hermite-Kurven: BerechnungHermite-Kurven: Berechnung( ) [ ]
xHHxxxx GMtttdtctbtatx ⋅⋅=+++= 12323
( ) [ ]xx HH GMPx ⋅⋅== 10000 0
( ) [ ]xx HH GMPx ⋅⋅== 11111 1 xx
( ) [ ]xHHxxx GMttctbtatx ⋅⋅=++= 012323' 22
( ) [ ] HH GMdx ⋅⋅== 01000' 0
Analog für y(t), y´(t)
( ) [ ]xx HH GMdx 01000 0
( ) [ ]xx HH GMdx ⋅⋅== 01231' 1
GMGPP
⋅⋅⎟⎟⎟⎞
⎜⎜⎜⎛
==⎟⎟⎟⎞
⎜⎜⎜⎛
11111000
1
0
⎟⎟⎟⎞
⎜⎜⎜⎛
−−−−
=⎟⎟⎟⎞
⎜⎜⎜⎛
=
−
12331122
11111000 1
HMHHH GMG
dd
⎟⎟⎟
⎠⎜⎜⎜
⎝⎟⎟⎟
⎠⎜⎜⎜
⎝ 01230100
1
0 ⎟⎟⎟
⎠⎜⎜⎜
⎝⎟⎟⎟
⎠⎜⎜⎜
⎝ 00010100
01230100H
T. Grosch - 35 -
Hermite-Kurven: BasisfunktionenHermite-Kurven: Basisfunktionen
⎟⎟⎞
⎜⎜⎛
⎟⎟⎞
⎜⎜⎛ − 0
12331122
PP
( ) [ ]⎟⎟⎟⎟
⎠⎜⎜⎜⎜
⎝
⋅
⎟⎟⎟⎟
⎠⎜⎜⎜⎜
⎝
−−−⋅=
1
0
123
000101001233
1
ddP
ttttP
⎠⎝⎠⎝
( ) ( ) 123
023
123
023 )()2(32132)( dttdtttPttPtttP −++−++−++−=
0.8
1
132 23 +− tt 23 32 tt +−
0.4
0.6
0
0.2
0 0.2 0.4 0.6 0.8 1
ttt +− 23 2
23 tt −
T. Grosch - 36 -
Hermite ↔ Bézier IHermite ↔ Bézier I
⎟⎞
⎜⎛
⎟⎞
⎜⎛ − 01122 PH
( ) [ ]⎟⎟⎟⎟⎟⎞
⎜⎜⎜⎜⎜⎛
⋅
⎟⎟⎟⎟⎟
⎠
⎞
⎜⎜⎜⎜⎜
⎝
⎛−−−
⋅=0
1
0
23
01001233
1dP
ttttPH
Hermite:
⎟⎠
⎜⎝
⎟⎠
⎜⎝ 10001 d
⎟⎞
⎜⎛
⎟⎞
⎜⎛ −− 01331 P
( ) [ ]⎟⎟⎟⎟⎟
⎠⎜⎜⎜⎜⎜
⎝
⋅
⎟⎟⎟⎟⎟
⎠⎜⎜⎜⎜⎜
⎝
−−
⋅=
3
2
123
000100330363
1
PPP
ttttPBézier:
⎠⎝⎠⎝ 30001 P
⎟⎟⎞
⎜⎜⎛
⎟⎟⎞
⎜⎜⎛
−−−−
⎟⎟⎞
⎜⎜⎛
−−−
⎟⎟⎞
⎜⎜⎛
−
1
01
1
0
12331122
03631331
PP
PP
H
H
⎟⎟⎟⎟
⎠⎜⎜⎜⎜
⎝
⋅
⎟⎟⎟⎟
⎠⎜⎜⎜⎜
⎝⎟⎟⎟⎟
⎠⎜⎜⎜⎜
⎝
−=
⎟⎟⎟⎟
⎠⎜⎜⎜⎜
⎝ 1
0
1
3
2
1
00010100
00010033
dd
PP
T. Grosch - 37 -
Hermite ↔ Bézier IIHermite ↔ Bézier II
⎞⎛⎞⎛⎞⎛⎞⎛−1 H
⎟⎟⎟⎟⎞
⎜⎜⎜⎜⎛
⋅⎟⎟⎟⎟⎞
⎜⎜⎜⎜⎛
−−−−
⎟⎟⎟⎟⎞
⎜⎜⎜⎜⎛
−−
−−
=⎟⎟⎟⎟⎞
⎜⎜⎜⎜⎛
−
0
1
01
2
1
0
01001233
1122
003303631331
dPP
PPP
H
H
⎟⎟⎠
⎜⎜⎝
⎟⎟⎠
⎜⎜⎝
⎟⎟⎠
⎜⎜⎝
⎟⎟⎠
⎜⎜⎝ 1
0
3
2
00010001 dd
P
⎟⎞
⎜⎛
⎟⎞
⎜⎛ −⎟⎞
⎜⎛
⎟⎞
⎜⎛ 00 11221000 PP H
⎟⎟⎟⎟⎟⎞
⎜⎜⎜⎜⎜⎛
⋅
⎟⎟⎟⎟⎟⎞
⎜⎜⎜⎜⎜⎛
−−−
⎟⎟⎟⎟⎟⎞
⎜⎜⎜⎜⎜⎛
=
⎟⎟⎟⎟⎟⎞
⎜⎜⎜⎜⎜⎛
0
1
0
2
1
0
01001233
13231013100
000
dPP
PP H
⎟⎠
⎜⎝
⎟⎟⎠
⎜⎜⎝⎟⎟⎠
⎜⎜⎝
⎟⎟⎠
⎜⎜⎝ 13 00011111 dP
⎟⎟⎞
⎜⎜⎛
⎟⎟⎞
⎜⎜⎛
⎟⎟⎞
⎜⎜⎛ 00
031010001
PP
PP
H
H
H
H
dPP
PP 00
31
=
⎟⎟⎟⎟
⎠⎜⎜⎜⎜
⎝
⋅
⎟⎟⎟⎟
⎠⎜⎜⎜⎜
⎝
−=
⎟⎟⎟⎟
⎠⎜⎜⎜⎜
⎝ 1
0
1
3
2
1
001031010
03101
ddP
PPP H
H
H
H
PP
dPP
dPP
13
112
001
31
31
=
⋅−=
⋅+=
⎠⎝⎠⎝⎠⎝ 13 PP 13
T. Grosch - 38 -
Beispiel dBeispiel
HPP
0d
H
H
H
dPP
dPP
PP
001
00
31
31
⋅−=
⋅+=
=
PHPP
dPP
13
112 31
=
=2P
P
1P
P0P 3P
0P 1P
Hermite Bézier
1dHermite: SEHR lange Tangenten…
1
T. Grosch - 39 -
Hermite-SplinesHermite-Splines
Liefert eine InterpolationLiefert eine InterpolationEignen sich gut, wenn Punkte und Tangenten gegeben sindgegeben sindGutes Beispiel: Kamera-Animation
Man definiert für jeden „Key-Frame“ den Ort der Kamera und j „ ydie tangentiale BlickrichtungMit Hilfe eines Hermite-Splines wird eine weiche Kamerabewegung interpoliertKamerabewegung interpoliert.Problem: Überschwingen
Terrain
T. Grosch - 40 -
Catmull-Rom SplinesCatmull-Rom SplinesSpeziallfall der Hermite-SplinesSpeziallfall der Hermite SplinesGegen ist ein Menge von Punkten (Datentabelle, Mausklicks), gesucht eine interpolierte KurveIdee: die Tangente der Hermite-Splines wird automatisch aus Vorgänger- und Nachfolgerpunkt berechnet:
211 −+ −
= iii
PPd 2
Optionen für Randpunkte:weglassen
13
4
weglassenTangente aus P1 und P2 (bzw. PN-1 und PN) bildenzyklisch (geschlossene Kurve)
3
T. Grosch - 41 -
Kurven in OpenGL
Bézierkurven in OpenGLBézierkurven in OpenGL
Stützpunkte werden bestimmt durchStützpunkte werden bestimmt durchglMap{12}{fd}( target, u1, u2, ustride, uorder,
[v1, v2, vstride, vorder,] points );[ , , , ,] p );target bestimmt, wofür die Stützpunkte dienen sollen: GL_MAP{12}_VERTEX{34}, GL_MAP{12}_COLOR_4, GL MAP{12} NORMALGL_MAP{12}_NORMAL, GL_MAP{12}_TEXTURE_COORD_{1234} bestimmt sowohl Attribut als auch Komponentenanzahl
T. Grosch - 43 -
StützpunkteStützpunkte
u1 u2 bzw v1 v2 bestimmen den Parameterbereichu1, u2 bzw. v1, v2 bestimmen den Parameterbereich, den die Kurve abdecken soll (normal zwischen 0 und 1))ustride/vstride die Anzahl der Float-Werte pro Stützpunkt (also 3 für x, y und z)uorder/vorder die Anzahl der Stützpunkte in u/v-Richtung, Maximum implementierungsabhängigpoints zeigt auf den ersten Stützpunkt
T. Grosch - 44 -
EvaluierungEvaluierung
Punkte auf der Kurve/Fläche können dann durchPunkte auf der Kurve/Fläche können dann durchglEvalCoord{12}{df}[v]( value[, value] );erzeugt werdenerzeugt werdendabei wird für jede glEnable()te Map das entsprechende Kommando ausgeführt z B wennentsprechende Kommando ausgeführt, z.B. wenn GL_MAP{12}_VERTEX_3 und GL_MAP{12}_COLOR_4 aktiv sind
glColor4( r,g,b,a );glVertex3f( x,z,y );g ( y )
T. Grosch - 45 -
BeispielBeispiel/* bezcurve.c */ void display(void)
#include <stdlib.h>#include <GL/glut.h>
{int i;
glClear(GL_COLOR_BUFFER_BIT);GLfloat ctrlpoints[4][3] = {
{ -4.0, -4.0, 0.0}, { -2.0, 4.0, 0.0}, { 2.0, -4.0, 0.0},
glColor3f(1.0, 1.0, 1.0);glBegin(GL_LINE_STRIP);
for (i = 0; i <= 30; i++) glEvalCoord1f((GLfloat) i/30.0);
{ 4.0, 4.0, 0.0}};
void init(void){
glEnd();/* The following code displays the control points as dots. */glPointSize(5.0);
glClearColor(0.0, 0.0, 0.0, 0.0);glShadeModel(GL_FLAT);glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, &ctrlpoints[0][0]);
glColor3f(1.0, 1.0, 0.0);glBegin(GL_POINTS);
for (i = 0; i < 4; i++) glVertex3fv(&ctrlpoints[i][0]);
glEnable(GL_MAP1_VERTEX_3);}
glEnd();glFlush();
}
T. Grosch - 46 -
ZusammenfassungZusammenfassung
Bezier SplinesBezier SplinesRekursive UnterteilungBernstein Polynomeyde Casteljau Verfahren
Hermite SplinesCatmull-Rom Splines
Nächste WocheRay Tracing
T. Grosch - 47 -