• Keine Ergebnisse gefunden

Vorlesung„Computergraphik I“S. Müller (17) Kurven

N/A
N/A
Protected

Academic year: 2022

Aktie "Vorlesung„Computergraphik I“S. Müller (17) Kurven"

Copied!
25
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

(17) Kurven

Vorlesung

„Computergraphik I“

S. Müller

(2)

OpenGl-Pipeline

1

2

3

4

(3)

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

(4)

Kurven: Motivation 2

Gegeben ist eine Menge von Punkte (z.B. Messwerte)

x y

x y

Interpolation Approximation

(5)

Kurvenbeschreibung

Implizit

(unbekannte Lösungsmenge)

Explizit

(eingeschränkter Def.bereich)

Parametrisch

(flexibel und einfach handhabbar)

xy

r t

2 2

2

y r

x + =

2

0

2

2

+ yr = x

2

2

x

r y = ± −

( ) t = r cos ( ) t , y ( ) t = r sin ( ) t , t [ 0 , 2 π ]

x

(6)

Simples Beispiel (2D)

Lineare Interpolation zwischen 2 Punkten, parametrische Darstellung

( ) ( t = 1t ) P

0

+ tP

1

, t[ 0 , 1 ] P

P

0

P

1

) 1 ( − t

t

)

(t

P

(7)

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

00

P

10

P

11

P

01

u

v

(8)

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

0

P

2

4

P

1

P

1

2

P

1

4

P

3

Verallgemeinerung liefert eine appoximierte Parameterkurve

(

t 0

)

P0

P = =

(

t 1

)

P2

P = =

(9)

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 = − − ⋅ + ⋅ + ⋅ − ⋅ + ⋅

( ) ( ) ( )

2

2 1

0

2

2 1

1 t P t t P t P

t

P = − ⋅ + ⋅ ⋅ − ⋅ + ⋅

Umformung liefert:

Standardform der quadratischen Bézier-Kurven

(10)

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

1

und schließlich von P

2

Gewichtungsfunktionen

Positiv

Summe der

Gewichtungsfunktionen für jedes t gleich 1

( ) ( ) ( )

2

2 1

0

2

2 1

1 t P t t P t P

t

P = − ⋅ + ⋅ ⋅ − ⋅ + ⋅

t2

(

t

)

t⋅ −

⋅ 1

2

(

1 t

)

2

t

0 1

1

0

(11)

Interpretation

P

0

P

2

4

P

1

P

1

2

P

1

4

P

3 t2

(

1

)

2

2⋅t⋅ − t

(

1 t

)

2

t

0 1

1

0

( ) ( ) ( )

2

2 1

0

2

2 1

1 t P t t P t P

t

P = − ⋅ + ⋅ ⋅ − ⋅ + ⋅

Gewicht von P0

Gewicht von P1

Gewicht von P2

(12)

Tangente an Start-/Endpunkt

( ) ( ) ( )

2

2 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

0

P

2

P

1

Tangente 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 ….)

(13)

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

0

P

2

P

1

(14)

Kubische Bézier-Kurven

P

0

P

2

1 ,

P

0

P

1

2 ,

P

0

) (t P

P

3

1 ,

P

2 1

,

P

1

2 ,

P

1

) (t P

1 ,

P

0

1 ,

P

2 1

,

P

1

2 ,

P

0

2 ,

P

1

5 .

= 0

t P

0

P

2

P

1

P

3

25 .

= 0 t

( ) ( t 1 t )

3

P 3 ( 1 t )

2

t P 3 ( 1 t ) t

2

P t

3

P

P = − ⋅ + − ⋅ + − ⋅ + ⋅

(15)

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

)

2

3tt

(

1 t

)

3

t

0 1

1

0

(

t

)

t 1− 3 2

kurve_bezier.vcproj

(16)

P1

P1

P1

P1 P1

P1

P0 P0 P0

P P2

P2 P2

P2 P2

P3

P3

P P3

(17)

Beispiel: Powerpoint

(18)

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“

( ) ∑ ( )

=

=

n

i

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 i

i n

i

t t

i

B n ⋅ ⋅ −

 

=  1

,

( n ! )

n

= −

 

 

(19)

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.

( ) ∑ ( )

=

=

n

i

i n

i

t P

B t

P

0 ,

( )

n i

i n

i

t t

i

B n ⋅ ⋅ −

 

=  1

,

n B

( )

t = 1 t [0,1]

(20)

Subdivision (Unterteilung)

Gegeben seien die

Liniensegmente (rechts)

Man unterteilt jede Kante (z.B. P

0

P

1

und P

1

P

2

) z.B. in 2 gleiche Teile

Die neue Kante (P

0,1

P

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

0

P

1

P

2

1 ,

P

0

1 ,

P

1

P

subdivide (rek, p0, p1, p2) {

if (rek >= max_rek) {

Zeichne Linien (p0, p1, p2);

Abbruch;

}

p01 = (p0+p1)/2.0;

(21)

P

0

P

1

P

2

1 ,

P

0

1 ,

P

1

P

P

0

P

1

P

2

1 ,

P0

1 ,

P1

P

P

2

P

0

1 ,

P0 1,1

P

P

1

P

Beispiel

1. Rekursion:

2. Rekursion:

kurve_subdiv.vcproj Was passiert mit der Kurve, wenn wir die

(22)

Halbierung/Drittelung ?

Halbierung

(23)

Mathematisch: 1. Rekursion

P

0

P

1

P

2

1 ,

P

0

1 ,

P

1

P

(

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

(24)

Mathematisch: 2. Rekursion (links)

P

0 1 ,

P

0

P

2

Pa

Pb

4

P1

2

P

1

P

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

+ +

=



 

 

 

 +

 +

 

 +

+ +

=

+

=

(25)

Was sagt uns das ?

P

0 1 ,

P

0

P

2

P

a

P

b

4

P

1

2

P

1

P

1

P

0

P

2

4 ) ( 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.

Referenzen

ÄHNLICHE DOKUMENTE

  Lineare Algebra: Vektoren und Vektorräume, Matrizen..

  Clipping = teilweise sichtbare Objekte (Linien / Polygone) müssen gegen Window / Viewport geclippt werden.   Resultat = maximales Teil-Objekt, das vollständig im

 Peter Shirley: Fundamentals of Computer Graphics, A K Peters LTD, Second Edition 2005.

 Destruktoren sollten immer dann verwendet werden, wenn in einer Klasse Member-Variablen dynamisch angelegt werden. Anderenfalls wird der reservierte Speicher

 Mit Hilfe von Zeigern kann man auch dynamische (herkömmliche) Arrays erzeugen ( n sei eine Variable, welche die Größe enthält):. int* a =

 Diese Routine wird der Reihe nach für jede

 Problem an den Ecken: durch Vorzeichentest der Vorzeichen sicherstellen, dass für jeden Span auch Anfang- und{.

• ABER: keine Drehung von Rechts- nach Linkssystem, Normalen zeigen nach