Verschieben in Kugelkoordinate < Moduln/Vektorraum < Lineare Algebra < Hochschule < Mathe < Vorhilfe
|
Status: |
(Frage) reagiert/warte auf Reaktion | Datum: | 11:43 Mi 10.02.2010 | Autor: | ommi |
ich habe gerade einen extremen durchhänger und hoffe mir kann hier jemand wieder auf die sprünge helfen.
für mein 3D-informatikprojekt möchte ich ein objekt um einen bestimmten winkel um die kamera "drehen", d.h. der winkel zur kamera soll sich um beispielsweise 5 grad vergrößern, allerdings soll sich das objekt nur auf der x-achse bewegen, wenn ich das objekt nur drehe verändern sich ja u.U. auch die Y- und Z-Koordinaten.
meine begabung in linearer algebra ist nur sehr beschränkt, es wäre schön, wenn mir jemand bei der entwicklung eines geeigneten algorithmus zur "drehung" bzw. verschiebung unter die arme greifen könnte.
ich arbeite derzeit mit kugelkoordinaten, eine umsetzung in kartesischen koordinaten wäre aber auch kein problem, wünschenswert ist natürlich immer der weg mit dem geringsten rechenaufwand für das programm.
danke schon im voraus
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 12:01 Mi 10.02.2010 | Autor: | leduart |
Hallo
Du beschreibst dein Projekt zu ungenau.
Wo in deinem System sitzt die Kamera?
Um die Kamera drehen ist keine Beschreibung, man kann nicht um einen Punkt drehen, nur un ne Achse.
Du sagst, das objekt muss auf der x- Achse bleiben, rechnest aber in Kugelkoordinaten? usw.
Bitte mach dein Problem etwa klarer, evt. mit nem Beispiel.
Gruss leduart
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 12:35 Mi 10.02.2010 | Autor: | ommi |
tut mir leid, wenn meine beschreibung zu ungenau war.
zu deinen 3 punkten/fragen:
- die kamera ist an einem vordefinierten punkt fixiert (um genau zu sein in kartesischen koordinaten (0, 200, 200)) und visiert das objekt zu anfang genau an, dieses sitzt zu beginn im ursprung (0,0,0).
- es geht mir darum, dass das objekt bei einem "schritt" nach rechts/links eine bestimmte entfernung auf dem bildschirm (also aus sicht der kamera) zurücklegt, später soll die kamera dann auch weiter weg oder näher ran bewegt werden, aber z.b. 30 "schritte" sollen immer bedeuten, dass das objekt ganz am rand des bildschirms erscheint, egal wie weit die kamera weg ist
das objekt zu "drehen" war sicher der falsche ausdruck, ich hoffe jetzt ist das problem etwas besser zu verstehen, ich weiß auch nicht genau wie ich es anders beschreiben soll, ohne es vorzuführen
-das objekt soll logischerweise in kartesischen koordinaten auf der x-achse bleiben
danke für die schnelle reaktion
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 15:27 Mi 10.02.2010 | Autor: | leduart |
Hallo
ich weiss nicht, ob ich dein Problem richtig verstanden habe.
Was ich verstanden habe, hab ich mal 2d aufgemalt.
die Kameraöffnung ist bei A, der Aufnahmeebene BC
(0,0) hat sein Bild in der Mitte, (0,4,5) am Rand, also wären das für dich 30 Schritte.
Dann hab ich das Bild bei 10 Schritten am Punkt F. entsprechen kannst du für einen Schritt vorgehen.
alle Winkel und Grössen und Beziehungen sollte man dann in dem Bild ablesen könne,
Kannst du daran dein Problem schildern?
oder hab ich was völlig falsch verstanden?
[Dateianhang nicht öffentlich]
Gruss leduart
Dateianhänge: Anhang Nr. 1 (Typ: png) [nicht öffentlich]
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 17:44 Mi 10.02.2010 | Autor: | ommi |
deine zeichnung ist schon sehr gut, sie zeigt, dass wir uns doch nicht komplett missverstanden haben
leider trifft diese zeichnung nur auf den von mir beschriebenen spezialfall zu, ich dachte, dass ich es damit leicht verallgemeinern kann
ich habe heute leider keine zeit mehr, morgen mache ich ein paar bilder fertig, um das problem anschaulicher zu machen und hoffe, dass ich hier dann auch noch hilfe finde
danke für die mühe bis hierhin
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 09:48 Do 11.02.2010 | Autor: | ommi |
ich habe mal ein paar screenshots von einer testszene gemacht um mein problem besser zu verdeutlichen.
[Dateianhang nicht öffentlich]
das ist die ausgangsstellung, das objekt (das wir hier vereinfacht mal als ebene betrachten) ist im ursprung des koordinatensystems und liegt in der x-z-ebene, die kamera ist im punkt (0, 200, 200) und ist direkt auf den ursprung gerichtet. die sichtbare normale des objekts ist die positive y-achse des systems, die x-achse verläuft aus dieser sicht von links nach rechts, und die positive z-richtung verläuft in richtung der kamera.
der bildschirm hat eine auflösung von 640*480.
[Dateianhang nicht öffentlich]
[Dateianhang nicht öffentlich]
hier ist der mittelpunkt des objekts am oberen bzw. am rechten rand.
der neigungswinkel und die position der kamera bleiben während der ganzen zeit unverändert. das objekt soll in der x-z-ebene beweglich sein, allerdings nicht in y-richtung. die bewegung erfolgt in "schritten", bei einem schritt in x-richtung soll das objekt auf dem bildschirm genau 1 pixel nach rechts (bzw. links) zurücklegen, d.h. von der ausgangsstellung aus braucht das objekt genau 320 schritte um an den rechten rand des bildschirms zu gelangen (bild 3), in z-richtung bräuchte es 240 schritte um den oberen rand zu erreichen (bild 2).
gesucht ist jetzt ein algorithmus der das objekt an jeder beliebigen position im sichtfeld der kamera um genau 1 pixel auf dem bildschirm zurücklegt. der sichtbereich (field of view) der kamera sei bekannt.
ich hoffe diesmal ist mein problem verständlicher und anschaulicher
Dateianhänge: Anhang Nr. 1 (Typ: JPG) [nicht öffentlich] Anhang Nr. 2 (Typ: JPG) [nicht öffentlich] Anhang Nr. 3 (Typ: JPG) [nicht öffentlich]
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 00:46 Fr 12.02.2010 | Autor: | felixf |
Moin!
Also, ich fasse das mal zusammen. Du hast einen Punkt $P$ im Raum auf der x-z-Ebene, der in Bildschirmkoordiaten die Position $(x', y')$ (bzw. $(x', y', 1)$ in homogenen Koordinaten) hat. Jetzt willst du wissen, welcher Punkt $P'$ in der x-z-Ebene die Position $(x' + a, y' + b)$ in Bildschirmkoordinaten hat. Richtig?
Fuer den Uebergang von Weltkoordinaten $(x, y, z, 1)$ (ich nehme mal an, du verwendest homogene Koordinaten) in Bildschirmkoordinaten $(x', y', w')$ (welches dem Punkt $(x'/w', y'/w')$ entspricht) hast du doch eine Matrix $A$ der Groesse $4 [mm] \times [/mm] 3$ (oder $4 [mm] \times [/mm] 4$, wenn du Bildschirmkoordiaten der Form $(x', y', 0, w')$ hast) mit $A [mm] \vektor{ x \\ y \\ z \\ 1 } [/mm] = [mm] \vektor{ x' \\ y' \\ w' }$.
[/mm]
Jetzt willst du irgendwelche Bildschirmkoordinaten $(x', y', 1)$ vorgeben und wissen, welcher Punkt $(x t, 0, z t, t)$ (dies entspricht dem Punkt $(x, 0, z, 1)$) der x-z-Ebene darauf abgebildet wird.
Dazu schreibst du das Gleichungssystem $A [mm] \vektor{ X \\ 0 \\ Y \\ T } [/mm] = [mm] \vektor{ x' \\ y' \\ 1 }$ [/mm] hin mit den Unbestimmten $X, Y, T$, und loest es, etwa mit Gauss-Elimination oder etwas numerisch leicht besseren. Die Loesungen werden wohl einen eindimensionalen Vektorraum bilden, nimm dir einfach ein Element [mm] $\neq [/mm] 0$ raus (also einen Basisvektor); dieser erfuellt dann $T [mm] \neq [/mm] 0$, womit du $x = [mm] \frac{X}{T}$, [/mm] $z = [mm] \frac{Z}{T}$ [/mm] waehlen kannst und dann den Punkt $(x, 0, z, 1)$ in der x-z-Ebene hast.
Das ist dein gesuchter Punkt.
Ich hoffe das hilft dir weiter...
LG Felix
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 09:09 Fr 12.02.2010 | Autor: | ommi |
super! das hilft mir sicher weiter
da hätte ich eigentlich auch selbst draufkommen können (müssen), aber ich habe mich wohl zu sehr auf eine geometrische lösung konzentriert
vielen dank für die ausführliche antwort
|
|
|
|