Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision...

47
(10) Splines Vorlesung C t fik“ Computergrafik“ T. Grosch

Transcript of Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision...

Page 1: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

(10) Splines

VorlesungC t fik“„Computergrafik“

T. Grosch

Page 2: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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 -

Page 3: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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 -

Page 4: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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 -

Page 5: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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 -

Page 6: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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 -

Page 7: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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 -

Page 8: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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 -

Page 9: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

Wiederholte HalbierungWiederholte Halbierung

Was passiert mit der Kurve, wenn wir die Kanten nicht halbieren sondern dritteln ?

T. Grosch - 9 -

Page 10: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

Halbierung/Drittelung ?Halbierung/Drittelung ?

HalbierungHalbierung

Drittelungdi l i h K

g…die gleiche Kurve

T. Grosch - 10 -

Page 11: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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 -

Page 12: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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 -

Page 13: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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 -

Page 14: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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 -

Page 15: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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 -

Page 16: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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 -

Page 17: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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 -

Page 18: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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 -

Page 19: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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)

Page 20: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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 -

Page 21: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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 -

Page 22: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

1P 1P2P 2P

1P

1P 1P

0P 0P 0P2P

2P 2P

3P

3P1 12 23P

1P0P 0P

0P2P 3P 3P4P

T. Grosch - 22 -

Page 23: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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 -

Page 24: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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 -

Page 25: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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 -

Page 26: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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 -

Page 27: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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 -

Page 28: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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 -

Page 29: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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 -

Page 30: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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 -

Page 31: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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 -

Page 32: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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 -

Page 33: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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 -

Page 34: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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 -

Page 35: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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 -

Page 36: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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 -

Page 37: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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 -

Page 38: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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 -

Page 39: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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 -

Page 40: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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 -

Page 41: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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 -

Page 42: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

Kurven in OpenGL

Page 43: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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 -

Page 44: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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 -

Page 45: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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 -

Page 46: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

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 -

Page 47: Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision (Unterteilung) Gegebenseiendie P 1 P 1,1 P 2 Gegeben seien die Liniensegmente (rechts)

ZusammenfassungZusammenfassung

Bezier SplinesBezier SplinesRekursive UnterteilungBernstein Polynomeyde Casteljau Verfahren

Hermite SplinesCatmull-Rom Splines

Nächste WocheRay Tracing

T. Grosch - 47 -