Gerade um Punkt rotieren < Vektoren < Lin. Algebra/Vektor < Oberstufe < Schule < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 20:21 Sa 07.12.2013 | Autor: | Ceriana |
Huhu,
meine Frage hat weniger mit Schulmathematik zu tun, als mit Computergrafik. Trotzdem denke ich, dass ich im Vektoren-Unterforum richtig aufgehoben bin. Andernfalls bitte verschieben :)
Folgendes Szenario:
Ich habe einen Punkt im Raum, der als Ursprung für die Kamera fungiert, also wo die "Augen" sitzen. Die Kamera blickt auf einen weiteren Punkt im Raum, das Ziel. Würde man die Kamera als Ebene sehen, wäre dieses Ziel auf einer Geraden, ausgehend vom Mittelpunkt der (sichtbaren) Ebene. Wo genau dieser Punkt liegt ist unerheblich, ob er nun ganz nah vor der Kamera liegt, oder irgendwo im Unendlichen.
Nun möchte ich die Kamera drehen, um alle eigenen Achsen. Hoch und runter, links und rechts, um alle Achsen. Aber wie berechne ich nun den Vektor des neuen Zieles, auf das die Kamera blickt?
Ich habe etwas von Drehmatrizen gelesen, aber mit denen weiss ich nicht wirklich etwas anzufangen, bzw. wie ich durch diese auf die neuen Koordinaten komme. Kann mir da jemand weiterhelfen?
Grüße,
Ceriana
|
|
|
|
Hallo!
Drehmatrix ist prinzipiell schon das richtige Stichwort. Zunächst mal muß deine Kamera im Ursprung des Koordinatensystems liegen. Wenn nicht, muß man das Koordinatensystem erstmal entsprechend verschieben.
Das Prinzip machst du dir am besten in 2D klar. Da lautet die Matrix [mm] \begin{pmatrix} \cos\alpha & -\sin\alpha \\ \sin\alpha & \cos\alpha\end{pmatrix}. [/mm]
Betrachte jetzt den Vektor [mm] \vektor{0\\1} [/mm] und [mm] \alpha=45° [/mm] . Das eingesetzt ergibt:
[mm] \begin{pmatrix} \cos 45° & -\sin 45° \\ \sin 45° & \cos 45°\end{pmatrix}*\vektor{0\\1}=\vektor{- \sin 45°\\\cos 45°}=\vektor{-\frac{2}{\sqrt{2}}\\ \frac{2}{\sqrt{2}}}
[/mm]
Damit hast du den Vektor um 45° gedreht, und zwar im mathematisch positiven Sinn, also gegen den Uhrzeigersinn. Prinzipiell ist das aber schon genau das, was du willst!
Wenn du nun sagst, daß du im Dreidimensionalen eine Kamera hast, die in der xy-Ebene im Ursprung sitzt, und in Richtung y guckt, kannst du die Matrix zu [mm] \begin{pmatrix} \cos\alpha & -\sin\alpha & 0\\ \sin\alpha & \cos\alpha & 0 \\ 0&0&1\end{pmatrix} [/mm] erweitert. Damit realisierst du eine rechts-links-Drehung. Der Blick nach oben/unten ist eine Drehung um x, [mm] also\begin{pmatrix} 1 & 0 & 0 \\ 0 & \cos \alpha & -\sin \alpha \\ 0 & \sin \alpha & \cos \alpha \end{pmatrix}. [/mm] Und die Drehung um die y-Achse [mm] \begin{pmatrix} \cos \alpha & 0 & \sin \alpha \\ 0 & 1 & 0 \\ -\sin \alpha & 0 & \cos \alpha \end{pmatrix} [/mm] entspricht dem Kippen der Kamera.
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 22:06 Sa 07.12.2013 | Autor: | Ceriana |
Warum muss ich denn das Koordinatensystem verschieben? Geht das nicht auch außerhalb des Ursprungs?
Dann müsste ich mir ja theoretisch merken, um wieviel ich das Koordinatensystem verschieben musste, um für den Stützvektor x,y,z=0 zu bekommen, und um diese Werte die neue Gerade wieder verschieben, oder?
Könnte man der Kamera nicht einfach ein eigenes Koordinatensystem zuordnen, um das sich dann gedreht wird? Der Ursprung dieses Koordinatensystems wäre dann der Ortsvektor des ursprünglichen Stützvektors. So könnte man auch die Rotation im Vergleich zu restlichen "Welt" beobachten.
|
|
|
|
|
> Warum muss ich denn das Koordinatensystem verschieben? Geht
> das nicht auch außerhalb des Ursprungs?
>
> Dann müsste ich mir ja theoretisch merken, um wieviel ich
> das Koordinatensystem verschieben musste, um für den
> Stützvektor x,y,z=0 zu bekommen, und um diese Werte die
> neue Gerade wieder verschieben, oder?
>
> Könnte man der Kamera nicht einfach ein eigenes
> Koordinatensystem zuordnen, um das sich dann gedreht wird?
> Der Ursprung dieses Koordinatensystems wäre dann der
> Ortsvektor des ursprünglichen Stützvektors. So könnte
> man auch die Rotation im Vergleich zu restlichen "Welt"
> beobachten.
Hallo Ceriana,
die Sache mit einer allfälligen Verschiebung des Koordi-
natensystems ist meiner Ansicht nach eher nebensächlich.
Du hast ja zunächst eigentlich noch nicht einmal von
irgendeinem Koordinatensystem gesprochen.
Wichtiger wäre aber, dass du uns dein grundsätzliches
Anliegen genauer beschreiben würdest, damit man
geometrisch-mathematisch etwas dazu sagen kann.
Du sprichst zwar von irgendwelchen Drehwinkeln, aber
es wird nicht klar, was du damit dann wirklich anfangen
oder mathematisch beschreiben willst.
Schildere uns also bitte die konkrete Situation genauer
und zeig auch, was du bisher schon unternommen hast.
LG , Al-Chwarizmi
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 01:55 So 08.12.2013 | Autor: | Ceriana |
Puh, ich glaube dann muss das Thema wirklich in ein anderes Unterforum :D
Also gut.
Ich habe neben der Schule immer alle Unterrichtsinhalte als Funktionen und Klassen in einer Softwarebibliothek umgesetzt, schön geordnet nach Themen und Unterthemen. Ich habe also z.B. eine Bibliothek wo alle Inhalte aus der Analytischen Geometrie enthalten sind, von Vektoren über Geraden bis hin zu Ebenen und Kugeln. Eigentlich nur ein Produkt meiner Faulheit, da ich keine Lust hatte, die x-te Geradengleichung zu bearbeiten, aber naja.
Jetzt dachte ich mir, damit muss man doch irgendwas machen können. Da ich vor ein par Monaten für ein Projekt mal mit Blender arbeiten musste, kam mir da ein Raytracer in den Sinn. Die Funktionsweise ist sehr simpel, das komplizierte sind ja dann nur die ganzen Erweiterungen und Spezialisierungen.
Dann bin ich das erstmal ganz theoretisch angegangen, mit Kamera (s.o.), einem Frame (die Bildebene) und einer Menge Geraden, die durch jedes Pixel in die Szene geschossen werden und auf Kollisionen mit Objekten prüfen. Der Aufbau der Szene ist aber erstmal unerheblich.
Die Kamera sitzt also in einem Punkt (X,Y,Z) (im [mm] R^3), [/mm] und starrt auf ein Ziel (X,Y,Z), direkt vor sich. Das ist einfach nur dazu da, um der Kamera eine Orientierung zu geben. Nun war ich dabei, der Kamera einige Funktionalität zu geben, also sich im Raum zu bewegen, und sich halt zu rotieren.
Mathematisch gesprochen:
Die Kamera sitzt in einem Punkt und blickt "nach vorne". Der Punkt ist dabei der Stützvektor einer Gerade, und das Ziel liegt dann auf einem Vielfachen eines Richtungsvektors + den Stützvektor. Nun möchte ich den Richtungsvektor so verändern, dass die Gerade "um x Grad weiter gedreht" wird (keine bessere Formulierung gefunden :D), aber der Stützvektor, also die Position der Kamera, sich dabei nicht verändert. Die Drehung soll um die eigene Achse erfolgen, also als wäre der Stützvektor der Ursprung.
Dummerweise kommen Abbildungen in unserem Abitur nicht mehr vor, weswegen mir da einiges Wissen fehlt. Was ich bis jetzt habe? Mathematisch gesehen kaum etwas. Meine erste Idee war es, eine unsichtbare Kugel zu berechnen, auf der sich dann das Ziel bewegt. Aber leider fehlt mir das konkrete Wissen über Polarkoordinaten, und mehr als die Trigonometrie am Dreieck wurde bei uns auch nicht behandelt. Ich arbeite mich gerade in Abbildungen ein, aber mehr hab ich auch nicht vorzuweisen, zumindest nicht konkret zu diesem Thema.
Eines ist noch wichtig: Alles findet ohne Visualisierung statt, pure Rechnerei.
|
|
|
|
|
Hallo Ceriana
> Puh, ich glaube dann muss das Thema wirklich in ein anderes
> Unterforum :D
Naja, Vektorrechnung ist mal schon ein guter Anfang !
> Jetzt dachte ich mir, damit muss man doch irgendwas machen
> können. Da ich vor ein par Monaten für ein Projekt mal
> mit Blender arbeiten musste, kam mir da ein Raytracer in
> den Sinn. Die Funktionsweise ist sehr simpel, das
> komplizierte sind ja dann nur die ganzen Erweiterungen und
> Spezialisierungen.
>
> Dann bin ich das erstmal ganz theoretisch angegangen, mit
> Kamera (s.o.), einem Frame (die Bildebene) und einer Menge
> Geraden, die durch jedes Pixel in die Szene geschossen
> werden und auf Kollisionen mit Objekten prüfen. Der Aufbau
> der Szene ist aber erstmal unerheblich.
>
> Die Kamera sitzt also in einem Punkt (X,Y,Z) (im [mm]R^3),[/mm] und
> starrt auf ein Ziel (X,Y,Z), direkt vor sich.
Vorschlag:
schreiben wir doch zum Beispiel für den Punkt, wo die
Kamera sitzt, [mm] K(x_K,y_K,z_K) [/mm] und für den Zielpunkt [mm] Z(x_Z,y_Z,z_Z)
[/mm]
oder andere geeignete Bezeichnungen - aber jedenfalls
müssen wir für die Betrachtungen die Punkte klar
voneinander unterscheiden können.
> Das ist
> einfach nur dazu da, um der Kamera eine Orientierung zu
> geben. Nun war ich dabei, der Kamera einige Funktionalität
> zu geben, also sich im Raum zu bewegen, und sich halt zu
> rotieren.
>
> Mathematisch gesprochen:
>
> Die Kamera sitzt in einem Punkt und blickt "nach vorne".
... und wo ist "vorne" ?
Man könnte der Kamera ja zunächst einmal eine Standard-
Blickrichtung geben, zum Beispiel in Richtung der x-Achse
des Koordinatensystems. Anschließend kann die Kamera
um 3 Achsen gedreht werden, beispielsweise zuerst mal
um die Vertikalachse = z-Achse, also nach links oder
rechts schwenken oder ringsum für eine "Panorama-
Aufnahme". Den entsprechenden Drehwinkel könnte
man analog wie in der Astronomie "Azimutwinkel" [mm] \alpha
[/mm]
nennen. Dieser Winkel kann von 0° bis 360° laufen (oder
auch darüber hinaus ...) . Dann zweitens den Blick heben
durch einen "Elevationswinkel" [mm] \varepsilon [/mm] oder senken, wenn [mm] \varepsilon<0 [/mm] .
Standardintervall -90° [mm] \le\varepsilon\le [/mm] +90° vom Blick
genau nach unten bis zum Blick genau nach oben.
Falls nötig, könnte man dann, nachdem die Kamera
einmal genau auf den gewünschten Zielpunkt ausgerichtet
ist, die Kamera noch um die von ihr zum Zielpunkt
zeigende Achse drehen. Bei dieser Rotation, sagen wir
etwa um einen "Rotationswinkel" [mm] \rho [/mm] , bleibt zwar
der Zielpunkt genau in der Mitte des Blickfeldes, aber
das Bild "drum herum" wird im Uhrzeigersinn oder
anders rum gedreht.
> Der Punkt ist dabei der Stützvektor einer Gerade, und das
> Ziel liegt dann auf einem Vielfachen eines Richtungsvektors
> + den Stützvektor. Nun möchte ich den Richtungsvektor so
> verändern, dass die Gerade "um x Grad weiter gedreht" wird
> (keine bessere Formulierung gefunden :D), aber der
> Stützvektor, also die Position der Kamera, sich dabei
> nicht verändert. Die Drehung soll um die eigene Achse
> erfolgen, also als wäre der Stützvektor der Ursprung.
Eine Möglichkeit, die Drehwinkel zu bezeichnen, habe ich
schon angegeben.
> Dummerweise kommen Abbildungen in unserem Abitur nicht mehr
> vor, weswegen mir da einiges Wissen fehlt. Was ich bis
> jetzt habe? Mathematisch gesehen kaum etwas. Meine erste
> Idee war es, eine unsichtbare Kugel zu berechnen, auf der
> sich dann das Ziel bewegt.
Ein Vektor der Länge 1, der (wie oben beschrieben) zunächst
in x-Richtung zeigt, also [mm] \pmat{1\\0\\0} [/mm] und dann wie oben
beschrieben zuerst einmal um einen Azimutwinkel [mm] \alpha [/mm] um
die z-Achse gedreht wird, sieht dann so aus:
$\ [mm] \pmat{cos(\alpha)\\ sin(\alpha)\\ 0}$
[/mm]
Gibt man ihm dann zusätzlich noch eine Elevation [mm] \varepsilon [/mm] ,
sieht er nachher so aus:
$\ [mm] \pmat{cos(\varepsilon)*cos(\alpha)\\cos(\varepsilon)*sin(\alpha)\\ sin(\varepsilon)}$ [/mm]
Mathematisch gesehen sind wir damit bei den
Kugelkoordinaten.
Lass dich dort nicht verwirren durch die unterschied-
lichen Konventionen und Bezeichnungen. Hier habe
ich jetzt mit Absicht [mm] \alpha [/mm] für "Azimut" und [mm] \varepsilon [/mm] für
"Elevation" gewählt, im Sinne einer Merkhilfe !
Vielleicht kannst du ja damit schon etwas anfangen.
Wenn du weitere Fragen hast, sind wir da. Deklariere
neue Fragen aber bitte als solche - und nicht als bloße
"Mitteilungen" !
LG , Al-Chwarizmi
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 17:29 So 08.12.2013 | Autor: | Ceriana |
Guten Abend,
vielen Dank für deine ausführliche Antwort. Ja, die Bezeichnungen vergesse ich gerne, sollte ich mir ganz fix abgewöhnen ;)
Ich bin mir aber nicht ganz sicher, ob ich dich richtig verstanden hab. Das Standardziel ist klar, die Kamera guckt auf Z = [mm] \vektor{1 \\ 0 \\ 0}. [/mm] Aber was stelle ich nun mit dem Vektor [mm] \vektor{\cos\alpha \\ \sin\alpha\ \\ 0} [/mm] an? Multiplizieren geht nicht, da käme eine einzelne Zahl raus, addieren oder subtrahieren hat hier nichts sinnvolles ergeben beim Testen. Oder muss ich da irgendwas mit diesen Polarkoordinaten transformieren, damit was sinnvolles rauskommt?
Bei den Drehmatrizen aus der Antwort ganz oben kam ja wenigstens noch ein Vektor raus, aber hier bin ich doch etwas verwirrt.
|
|
|
|
|
> Guten Abend,
>
> vielen Dank für deine ausführliche Antwort. Ja, die
> Bezeichnungen vergesse ich gerne, sollte ich mir ganz fix
> abgewöhnen ;)
>
> Ich bin mir aber nicht ganz sicher, ob ich dich richtig
> verstanden hab. Das Standardziel ist klar, die Kamera guckt
> auf Z = [mm]\vektor{1 \\ 0 \\ 0}.[/mm] Aber was stelle ich nun mit
> dem Vektor [mm]\vektor{\cos\alpha \\ \sin\alpha\ \\ 0}[/mm] an?
Nun, das wäre eben der "Blickvektor" der Kamera, nachdem
man deren Blickrichtung um den Winkel [mm] \alpha [/mm] in der
horizontalen Ebene gedreht hat, und zwar als Vektor
der Länge 1 geschrieben.
> Multiplizieren geht nicht, da käme eine einzelne Zahl
> raus, addieren oder subtrahieren hat hier nichts sinnvolles
> ergeben beim Testen. Oder muss ich da irgendwas mit diesen
> Polarkoordinaten transformieren, damit was sinnvolles
> rauskommt?
Es stellt sich nun eben doch noch die Frage, was genau du
jetzt berechnen willst.
> Bei den Drehmatrizen aus der Antwort ganz oben kam ja
> wenigstens noch ein Vektor raus, aber hier bin ich doch
> etwas verwirrt.
Naja, ich habe doch eben gerade fixfertig angegeben,
welcher Vektor aus dem anfänglichen Einheitsvektor
[mm] (1,0,0)^T [/mm] in x-Richtung wird, nachdem man ihn um den
Winkel [mm] \alpha [/mm] um die z-Achse gedreht hat, und welcher
weitere Vektor dann daraus wird nach der Elevation
mit dem Winkel [mm] \varepsilon.
[/mm]
Wenn ich dich richtig verstanden hatte, wolltest du
zuerst nur dies, und dies habe ich "geliefert".
Du müsstest also genauer beschreiben, was du denn
wirklich noch beabsichtigst.
LG , Al-Chw.
|
|
|
|