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