1. Koordinaten und Vektoren (geometrische

Werbung
Universität zu Köln
Wintersemester 2009/2010
Softwaretechnologie II (Teil 1)
Dozent: Prof. Dr. Manfred Thaller
Referentin: Sarah Burmann
Die Geometrie der Ebene
19.11.2009
Inhalt
1. Koordinaten und Vektoren
(geometrische Grundlagen)
2. Bewegungen
3. Projektionen
1. Koordinaten und Vektoren (geometrische Grundlagen)
Definition und einfache Rechenoperationen
• Vektoren sind Pfeile mit einer bestimmten Länge und Richtung in
einem Koordinatensystem
• Länge des Vektors v=(a,b)wird bezeichnet durch
|v|
• wird in den Koordinatenabschnitten berechnet durch
|v|=√a²+b² (Satz des Pythagoras)
1. Koordinaten und Vektoren (geometrische Grundlagen)
Definition und einfache Rechenoperationen
Multiplikation
• Vektoren können mit einem Faktor c (Skalar) koordinatenweise multipliziert
werden, der entsprechende Pfeil verlängert oder verkürzt sich so
v=(a,b) multipliziert mit dem Faktor c
=> c*v=c*(a,b)=(c*a,c*b)
Addition
• 2 Vektoren können koordinatenweise addiert werden
v1=(a1,b1) und v2=(a2,b2)
=> v1+v2=(a1,b1)+(a2,b2)=(a1+a2,b1+b2)
1. Koordinaten und Vektoren (geometrische Grundlagen)
Definition und einfache Rechenoperationen
Skalarprodukt
• Macht aus zwei Vektoren eine Zahl (Skalar)
• Das Skalarprodukt zweier Vektoren a und b besitzt folgende Eigenschaften:
ab > 0 genau dann, wenn a und b einen spitzen Winkel einschließen
ab < 0 genau dann, wenn a und b einen stumpfen Winkel
einschließen
ab = 0 genau dann, wenn a und b orthogonal zueinander stehen
• Formel zur Berechnung
<a,b>=a1*b1+a2*b2
1. Koordinaten und Vektoren (geometrische Grundlagen)
Definition und einfache Rechenoperationen
• Multiplikation mit Skalar und Addition ermöglichen die Berechnung
jedes Vektors in der Ebene aus den Einheitsvektoren
• Einheitsvektoren: stehen senkrecht mit der Länge 1 aufeinander und
spannen die gesamte x-y-Ebene auf
e1=(1,0) und e2=(0,1)
1. Koordinaten und Vektoren (geometrische Grundlagen)
Definition und einfache Rechenoperationen
Polarkoordinatendarstellung
• Darstellung eines Vektors nicht durch seine x- und y-Koordinaten, sondern
durch seine Länge r und den Winkel α
(α = Winkel zwischen Vektor und x-Achse)
• hilfreich, wenn das Verhältnis zweier Punkte leichter durch Winkel und
Abstände zu beschreiben sind, als durch x- und y-Koordinaten
• Beispiel: Punkt p (3,4) lässt sich auch angeben durch die Länge des Vektors zu
Punkt p =√3²+4² = 5 und dem Winkel α der sich mithilfe der Winkelfunktionen
(s.u.) berechnen lässt. Dieser wird gewöhnlich im
Bogenmaß angegeben.
α
1. Koordinaten und Vektoren (geometrische Grundlagen)
Definition und einfache Rechenoperationen
Winkelmessung
• Bogenmaß eines Winkels = Verhältnis der Länge des Kreisbogens zum Radius
Einheitskreis
• Kreis mit dem Radius 1 und dem Umfang 2∏
(Drehung gegen den Uhrzeigersinn)
Jeder Winkel hat ein Bogenmaß zwischen 0 und 2∏
(45° = ∏/4; 90° = ∏/2; 180° = ∏; 270° = 3∏/2; 360° = 2∏)
1. Koordinaten und Vektoren (geometrische Grundlagen)
Definition und einfache Rechenoperationen
Sinus- und Cosinus-Funktionen
• a = Gegenkathete
b = Ankathete
c = Hypotenuse
• Berechnung von Sinus
sin(α)=Gegenkathete/Hypotenuse=a/c
• Berechnung von Cosinus
cos(α)=Ankathete/Hypotenuse=b/c
1. Koordinaten und Vektoren (geometrische Grundlagen)
Definition und einfache Rechenoperationen
Sinus- und Cosinus-Funktionen
• Die Hypotenuse im Einheitskreis ist 1(Hypotenuse=Radius), daher
entspricht der Cosinus des Winkels α immer der Länge der Ankathete
von α.
• Der Sinus des Winkels α entspricht der Länge der Gegenkathete
von α
=> cos(α) liefert den x-Wert eines Punktes p
=> sin(α) liefert den y-Wert eines Punktes p
=> p=(x,y)=(cos(α),sin(α))
• Wird der Radius r beliebig verändert, wird die
Formel entsprechend erweitert
p=(r*cos(α),r*sin(α))=r*(cos(α),sin(α))
1. Koordinaten und Vektoren (geometrische Grundlagen)
Definition und einfache Rechenoperationen
Projektion von Vektoren
Projektionen eines Vektors b auf einen Vektor a ergeben sich aus dem
Produkt der Länge des Projektionsvektors b‘ mit dem zu dem Vektor a
parallel liegenden Einheitsvektor. Vereinfacht kann die Formel
(<a,b>/|b|²)*b angewendet werden.
2. Bewegungen
Allgemein
• Jede Bewegung im 2-dimensionalen Raum setzt sich aus
Verschiebungen und Drehungen um den Koordinatenursprung
zusammen
• Drehungen die nicht um den Koordinatenursprung erfolgen werden
zunächst in den Koordinatenursprung verschoben, um diesen gedreht
und wieder zurück verschoben
Ausgangssituation
Verschiebung in den
Koord.Ursprung
Drehung gegen den
Uhrzeigersinn
Rückverschiebung
2. Bewegungen
Verschiebungen
• Verschiebungen (Translationen) werden mithilfe von Addition der
Koordinatenwerte und deren Versatz durchgeführt
• Beispiel: Der Vektor (2,3) soll um den Wert (10,6) verschoben werden
=> (2,3)+(10,6)=(12,9)
2. Bewegungen
Drehungen
• Drehungen eines Punktes (x,y) erfolgen durch die Drehung des
Koordinatensystems um einen Winkel α gegen den Uhrzeigersinn
• Der neue Punkt (x´,y´) ergibt sich aus der Formel
(x,y)=(cos(α )*x-sin(α )*y),(sin(α )*x+cos(α )*y)
O (x´,y´)
O (x,y)
α
α
2. Bewegungen
Skalierung (zoom in, zoom out)
• Skalierungen dienen der Vergrößerung und Verkleinerung von
Objekten
• Berechnung erfolgt durch das Einsetzen eines Skalierungsfaktors in
x- und y-Richtung
• Der zu skalierende Punkt wird zunächst in den Koordinatenursprung
geschoben, gezoomt und in seinen Ausgangspunkt zurückverschoben
• Durch die Anwendung unterschiedlicher Faktoren in
x- und y-Richtung erfolgt eine Verzerrung
• Negative Faktoren erzeugen eine Spiegelung
(2*1,5;2*2)=(3,4)
• Formel: x`=r*x
y`=s*y
(1,5;2)
(hier: r=s=2)
2. Bewegungen
Bisherige Rechenoperationen im Überblick
• Verschiebung von (x,y) um (u,v)
x´=x+u
y´=y+v
• Drehung von (x,y) um den Winkel α entgegen dem Uhrzeigersinn
x´=cos(α)*x-sin(α)*y
y`=sin(α)*x+cos(α)*y
• Skalierung von (x,y) mit den Faktoren r und s
x`=r*x
y`=s*y
2. Bewegungen
Einführung von Matrizen
• Um alle bisher genannten Rechenoperationen zu vereinfachen,
werden nachfolgend Matrizen verwendet
• Mithilfe von Matrizen werden die einzelnen Rechenschritte verkürzt,
so dass mit einer Rechenoperation beispielsweise die Verschiebung
eines Punktes p mit (x,y) in den Koordinatenursprung, seine Drehung
in den Punkt p` mit (x´,y´) und die Rückverschiebung in den
Ausgangspunkt berechnet werden können
2. Bewegungen
Rechnen mit Matrizen
• Eine Matrix besteht aus m-Zeilen und n-Spalten
• Sie beinhaltet somit m*n Zahlen
• Multiplikation mit Matrizen:
• 2 Matrizen können miteinander multipliziert werden, wenn die
erste Matrix genau so viele Spalten, wie die zweite Matrix
Zeilen hat
*
=
2. Bewegungen
Rechnen mit Matrizen
0
2
1
-1
-1
1
0
3
-2
3
2
0
*
4
2
1
0
5
-2
• Beispiel-Rechnung:
1. Beispiel (rot): 0*4+(-1)*2+(-2)*1=-4
2. Beispiel (grün): (-1)*0+3*5*0*(-2)=15
=
-4
13
6
2
-1
-1
-4
15
2. Bewegungen
Generierung von Matrizen für die einzelnen Operationen
• Für jede Bewegung von (x,y) -> (x‘,y‘) kann man verallgemeinert
schreiben
x‘ =a*x+b*y+c
y‘=d*x+e*y+f
wobei a-f geeignete Koeffizienten sind
•Beispiel: Bei der Verschiebung ist a =1; b = 0, c =u, d = 0; e =1, f=v
•Damit ergibt sich
x‘=1*x+0*y+u = x + u
y‘= 0*x+1*y+v= y +v
2. Bewegungen
Generierung von Matrizen für die einzelnen Operationen
• Der Einfachheit halber ergänzen wir dieses System um eine Variable
w (und die Koeffizienten g, h und i)
• w wird gleich 1 gesetzt und keine weiteren Rechenoperationen im
2-dimensionalen Raum mit dieser Variable durchgeführt
• Unser Gleichungssystem ist dann
(x,y,w) -> (x´,y´,w´)
x‘ =a*x+b*y+c
y‘=d*x+e*y+f
w´=0*x+0*y+1*w
• Dies ermöglicht es uns jede Bewegung als 3x3 Matrix zu schreiben.
Somit sind alle Matrizen miteinander kombinierbar
2. Bewegungen
Generierung von Matrizen für die einzelnen Operationen
• Aus dem Gleichungssystem (wie oben bereits eingeführt)
(x,y,w) -> (x´,y´,w´)
x‘ =a*x+b*y+c
y‘=d*x+e*y+f
w´=0*x+0*y+1*w
ergibt sich die Matrix
a
d
0
b
e
0
c
f
1
2. Bewegungen
Erweiterung der bisherigen Rechenoperationen mit Matrizen
• Verschiebung von (x,y) um (u,v)
x´=x+u
y´=y+v
als Matrix
1
0
0
0
1
0
u
v
1
• Drehung von (x,y) um den Winkel α entgegen dem Uhrzeigersinn
x´=cos(α)*x-sin(α)*y
y`=sin(α)*x+cos(α)*y
als Matrix
cos(α)
sin(α)
0
-sin(α)
cos(α)
0
0
1
0
• Skalierung von (x,y) mit den Faktoren r und s
x`=r*x
y`=s*y
als Matrix
r
0
0
0
s
0
0
0
1
2. Projektionen
Einführung
• Nachfolgend befassen wir uns mit zwei Arten von Projektionen
1. Orthogonale Projektion
2. Perspektivische Projektion
• Orthogonale Projektionen sind senkrechte Projektionen, bei denen
alle Punkte senkrecht auf eine Projektionsgerade projiziert werden.
• Bei perspektivischen Projektionen verlaufen die Projektionen nicht
orthogonal, sondern auf den Blickpunkt hin.
Dadurch erscheinen näher liegende Objekte größer und entferntere
kleiner.
Hier wird die x‘ –Koordinate nicht nur durch die x-Koordinate eines
Punktes P beeinflusst, sondern auch durch die y-Koordinate
2. Projektionen
Orthogonale Projektionen
• Der Punkt P des 2-dimensionalen Objekts wird senkrecht auf die
1-dimensionale Projektionsgerade g projiziert
• a ist die Distanz vom Blickpunkt bis zur Projektionsgeraden
• b ist die Distanz vom Blickpunkt
bis zur maximalen Sichtweite
P=(x,y)
alle Objekte zwischen a und b
werden auf die Projektionsgerade
Projiziert
b
g
• d ist die Breite des Sichtfensters
(vom Blickpunkt aus sieht
man d/2 nach rechts
und d/2 nach links)
Q=(x´,y´)
a
Kamera
Fensterbreite d
2. Projektionen
Orthogonale Projektionen
• Zwei Informationen werden zur Projektion benötigt
1. Wird der Punkt P auf eine Stelle innerhalb des
Sichtfensters projiziert?
2. Befindet sich der Punkt eher im Vordergrund oder im
Hintergrund?
• Die Projektion von einem 2-dimensionalen Objekt auf eine
1-dimensionale Projektionsfläche (Gerade g) erfordert trotzdem
2 Koordinaten
1. Eine Koordinate x´ die die Projektion des Punktes x auf der
Projektionsgeraden angibt, aus der man außerdem ablesen kann
ob die Projektion sich innerhalb des Fensters befindet.
Rechnerisch ergibt sich
x‘ = x/(d/2) -> 2x/d
liegt x´ in einem Bereich von -1 und +1, befindet sich der projizierte
Punkt x´ innerhalb des Sichtfensters auf der Projektionsgeraden g
2. Projektionen
Orthogonale Projektionen
Beispiel:
d=10 (die Fensterbreite hat einen Bereich von -5 bis +5)
der x-Wert von P ist 4
=> x‘ = x/(d/2) -> 2x/d
=> x´= (2*4)/10=0,8
Da das Ergebnis von 0,8 zwischen -1 und +1 liegt, befindet sich der
projizierte Punkt auf der innerhalb des Sichtfensters
Gegenbeispiel:
d=10 (die Fensterbreite hat einen Bereich von -5 bis +5)
der x-Wert von P ist 10
=> x‘ = x/(d/2) -> 2x/d
=> x´= (2*10)/10=2 (das Ergebnis liegt außerhalb des
sichtbaren Bereichs)
2. Projektionen
Orthogonale Projektionen
2. Es wird eine Koordinate benötigt, die angibt, wie weit der Punkt P
im Vordergrund liegt.
Die y`-Koordinate der y-Koordinate des projizierten Punktes einen
Wert zwischen 0 und 1 haben
Je näher y´ an 0 liegt, desto weiter befindet sich der Punkt im
Vordergrund.
Es ergibt sich folgende Transformation
y‘ = 1/(b-a) * y – a/(b-a)
Die Transformationsmatrix für x´ und y´ sieht wie folgt aus:
(2/d
0
0
0
1/(b-a)
0
0
-a/(b-a)
1
2. Projektionen
Perspektivische Projektionen
P=(x,y)
b
g
Q=(x´,y´)
a
Kamera
Fensterbreite d
2. Projektionen
Perspektivische Projektionen
• Beispiel
Ein Punkt P₁ ist weiter von der Projektionsgeraden g entfernt als ein
Punkt P₂.
Obwohl beide Punkte den gleichen x-Wert haben muss der x‘-Wert von
P₁ kleiner sein als der x´-Wert von P₂.
=>Die Strecke vom Bildmittelpunkt zu Punkt P₁ erscheint damit kleiner.
P1
P2
P1´
P2´
2. Projektionen
Perspektivische Projektionen
Aufgrund der Strahlensätze muss dabei das Verhältnis
von x zu y gleich dem Verhältnis von x‘ zu a sein.
Es gilt:
x‘/a = x/y
-> x‘=(a/y)*x
Da wir wie bei der orthogonalen Projektion auf einen Wert zwischen
-1 und 1 kommen wollen, teilen wir wiederum durch d/2.
Es ergibt sich also:
x‘ = 2a/(d*y)
2. Projektionen
Perspektivische Projektionen
• Die Projektion kann so nicht in eine Matrix eingefügt werden, da y
kein Koeffizient, sondern eine Koordinate ist. y kann sich also mit
jedem Punkt ändern.
• Das das Problem zu lösen, benutzen wir die bisher nicht benutzte
w-Koordinate
(2*a)/d
0
0
0
1
0
0
0
0
2. Projektionen
Perspektivische Projektionen
• Es ergibt sich folgende Rechenoperation
(x y 1) *
(2*a)/d
0
0
0
1
0
0
0
0
• Das Ergebnis hat zwei Unzulänglichkeiten:
1. x´ wurde noch nicht durch y geteilt
2. Als w´ haben wir nicht 1, sondern y.
= ( ( (2*a)/d)*x
0
y)
2. Projektionen
Perspektivische Projektionen
• Das Ergebnis hat zwei Unzulänglichkeiten:
1. x´ wurde noch nicht durch y geteilt
2. Als w´ haben wir nicht 1, sondern y.
• Beide Probleme können gelöst werden, indem das gesamte Ergebnis
durch y geteilt wird
( ((2*a)/d) *x
0
y) -> ( ( (2*a)/d*y)*x
0
1)
2. Projektionen
Perspektivische Projektionen
• Damit führen wir eine neue Art Operation ein:
=> Nach der Matrix-Multiplikation wird zurückskaliert
• Von der Zurückskalierung ist natürlich auch der y‘-Wert betroffen.
Daher wird hier, anstatt der o. g. Transformation, Folgende benutzt
y‘ = b/(b-a) – (a*b)/(b-a)
• Die Matrix für eine perspektivische Projektion lautet demnach:
(2*a)/d
0
0
0
b/(b-a)
1
0
-(a*b)/(b-a)
0
• Anschließend muss, wie oben beschrieben, zurückskaliert werden
Herunterladen