www.vorwissen.de
Ein Projekt von vorhilfe.de
Das gesammelte Wissen der Vorhilfe
Hallo Gast!einloggen | registrieren ]
Startseite · Mitglieder · Teams · Forum · Wissen · Kurse · Impressum
Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Softwaretechnik und Programmierung" - Position Grad zu Pixel
Position Grad zu Pixel < Softwaretechnik+Pro < Praktische Inform. < Hochschule < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Softwaretechnik und Programmierung"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Position Grad zu Pixel: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 12:38 Do 20.02.2014
Autor: highlight

Guten Tag,

Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.

folgendes Szenario:

Wir haben die Sicht von Google Street View. Das heißt man ist in einem Raum und kann sich um 360° nach Links oder Rechts drehen. 90° nach oben gucken bzw. 90° nach unten gucken.

Jedoch besteht dieser Raum aus einem einzigen 2D Bild. Das System weis nicht wie tief es geht, maximal in welche Richtung man laufen kann (durch die weisen Pfeile markiert).
Das 2D Bild nennt man auch Panorama-Bild und besteht aus mehreren Bildern die mit einem "Fischauge-Objektiv" aufgenommen wurde und zusammengesetzt wurde.

Der Start der Sicht, auch PoV (Point of View) genannt, startet bei 0°. Der wahre Nordpunkt ist bei 0°, Osten liegt bei 90°, Süden bei 180°, Westen bei 270° (wobei hier mit Minus Werten gerechnet wird, also 0 bis -180°).
Der maximale Punkt den man nach oben gucken kann liegt bei 90° und nach unten bei -90°.

Es gibt einen Zoom Level der beschreibt wie viel Grad man in der PoV-Sicht zu sehen hat.
- Level 0: 180°
- Level 1: 90°
- Level 2: 45°
- Level 3: 22.5°
- Level 4: 11.25°

Desweiteren ist die gesamte Breite des Panoramas bekannt, dieser liegt bei 13312 Pixel. Dreht man sich also um 360° nach rechts/links, sollte man 13312 Pixel hingelegt haben.


Nun zur eigentlichen Frage:

Angenommen ich möchte nun an einem zufälligen Punkt ein Element platzieren. Wenn ich nun die Kamera drehe und damit den PoV ändere, möchte ich das sich das Element passend so verschiebt, das es weiterhin an der Stelle bleibt, an der ich es haben möchte. Das kann zum Beispiel eine Lampe im Bild sein und das Element soll beim drehen der PoV weiterhin auf der Lampe bleiben.

Das Element wird mit der Einheit "Pixel" positioniert. Angenommen es soll 300 Pixel Abstand nach Links haben und 200 Pixel nach Oben. Wenn ich nun die Kamera um 10° nach Rechts drehe, soll sich der Abstand des Elements dementsprechend so anpassen, das es weiterhin an der Stelle des Bildes befindet, wie es am Ausgangspunkt getan hat.


Ich recherchiere nun schon Stundenlang mehrere Tage lang.. und konnte mich nur an diversen Vorgängen orientieren.

Ich muss folgende Werte anpassen:

- top in Pixel (Abstand nach oben)
- left in Pixel (Abstand nach links)


Folgende Formel habe ich bisher aufgebaut:

Grad zu Radiant->
180 / ( GRAD * PI )

Drehe ich die Kamera um 10° nach Rechts hätte ich:

180 / ( 10 * PI ) = 5.73 Rad


Leider hört da mein Spanisch auch auf.. Ich habe zwar nun den Bogenmaß, aber was soll ich damit anfangen?

Bereits wenn ich nur 10° nach Rechts bewege, verändert sich das ganze Bild so stark, dass das Element sich bereits um locker 50-100 Pixel verändern müsste.

Mein Kopf versucht mir weis zu machen das ich mit dem Bogenmaß und der gesamt Breite des Panoramas PLUS der Position des Elementes eine Formel aufstellen kann, womit ich zur Lösung kommen kann. Ich würde nicht fragen, wenn ich nicht wirklich die Hilfe von jemandem bräuchte der besser in der Materie ist und würde euch bitten mir wenigstens Stichwörter oder die Richtung zur Lösung zu verraten.

Angeblich soll mir auch das Kartesisches Koordinatensystem bei dem Problem helfen, aber bisher konnte ich da auch nicht fündig werden.

Weitere Fakten:

- Die Breite und Höhe des Panoramas sind Variabel
- Die Position des Elements ist Variabel
- Die PoV der Kamera ist Variabel, startet aber bei 0°/0°
- Der PoV hat locker 15 Komma-Stellen, z.B. 10.122289784755585°
- Der Zoom Level startet bei 1 und geht von 0-5


Über jegliche Hilfe wäre ich sehr Dankbar!

        
Bezug
Position Grad zu Pixel: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 17:57 Do 20.02.2014
Autor: highlight

Hallo erneut,

damit man sieht das ich mich auch damit beschäftige und nicht nur eine Aufgabe abgebe, damit Sie jemand anderes macht, poste ich mal meine bisherigen Fortschritte.

Ich habe meine erste These mit der gesamt Breite des Panoramas mal weiter überdacht und bin auf folgende Formeln gestoßen:


Field of View Berechnung (Die Breite des Ausschnitts das man sehen kann):

Formel für die Breite:

PanoramaBreite / ( 360 / ( 180 / ( 2 ^ zoomLevel ) ) )


Formel für die Höhe:

PanoramaHöhe / ( 180 / ( 180 / ( 2 ^ zoomLevel ) ) )


Die Winkel für die Field of View ist der hintere Part:

( 180 / ( 2 ^ zoomLevel ) )

Das ergibt dann folgende Werte:

- Level 0: 180
- Level 1: 90
- Level 2: 45
..

Wie bin ich auf die Formeln gekommen bzw. was sollen diese darstellen?:

Ich muss ja wissen, was angezeigt wird, um zu bestimmen, ob das Element angezeigt werden soll oder nicht und wenn ja, wo genau.

Zoom Level 0 zeigt genau 180°, also die Hälfte des Panoramas, d.h. wenn ich den Zoom durch den Maximalen Winkel von 360° Teile, habe ich das was angezeigt werden soll.
Wahrscheinlich habe ich das völlig unverständlich erklärt, da sich das alles in meinem Kopf in logische Schritte umsetzt und ich es nur schwer wiedergeben kann^^

Naja wenn man 360/180 teilt, hat man 2 und teilt man die gesamte Breite des Panoramas durch 2, also die Hälfte, hat man die 180° und damit den FieldOfView. Und je nach Zoomlevel verkleinert sich der FieldOfView.



Dann habe ich noch folgende Formel, um den genauen PointOfView (Sichtpunkt) zu definieren:

Punkt auf der X Koordinate:

( ( PanoramaBreite / 360 ) * PointOfViewHeading )

Punkt auf der Y Koordinate:

( ( PanoramaHöhe / 180 ) * PointOfViewPitch )

*PointOfViewHeading = Ausrichtung X Achse
*PointOfViewPitch = Ausrichtung Y Achse


Über das Kartesische Koordinatensystem habe ich mich auch informiert und finde es ziemlich interessant. Dadurch habe die Möglichkeit eventuell eine Formel zu basteln, leider verwende ich die Achse die nach vorne gerichtet ist nicht und damit ist es, soweit ich verstanden habe, nicht von Nöten.. Also verwende ich einfach nur einen X und Y Punkt.



Und ja, ich bin Froh darüber, jeder Fortschritt ist etwas gutes^^


Von diesem Punkt aus sollte es ja nicht mehr so weit zur Lösung sein.. noch fehlt mir der richtige Gedankenschritt, aber ich bin überzeugt diesen zu finden.

Falls jemand mir etwas auf die Sprünge helfen könnte wäre ich weiterhin sehr Dankbar.

Bis dahin schönen Tag noch ;)

Bezug
        
Bezug
Position Grad zu Pixel: Rückfrage
Status: (Antwort) fertig Status 
Datum: 14:38 So 02.03.2014
Autor: wieschoo

Ich versuche es mal:

Dein Panoramabild hat $w$ Pixel in der Breite und $h$ in der Höhe. Insgesamt [mm] $w\cdot [/mm] h$ Pixel.

Nun verhält sich $w$ zu [mm] $360^\circ$ [/mm] wie $x$ zu deiner Kamera-Rotation $r$ in Grad, also
[mm] $\frac{w}{360}=\frac{x}{r}\implies [/mm] x = [mm] \frac{w}{360}r$. [/mm]

Zoomst du nun in Level 0: Dann hast du
[mm] $\frac{w}{180}=\frac{x}{r}\implies [/mm] x = [mm] \frac{w}{180}r$ [/mm]
Zoomst du nun in Level 1: Dann hast du
[mm] $\frac{w}{90}=\frac{x}{r}\implies [/mm] x = [mm] \frac{w}{90}r$ [/mm]

Insgesamt suchst du eine bijektive Abbildung zwischen der Kameraausrichtung und einer koordinate des Panoramabilds?

Deine Kameraausrichtung wird durch
- zoom $z$ (in Grad)
- pan $p$ (horizontale Ausrichtung)
- tilt $t$ (vertikale Ausrichtung)

beschrieben. Das Panoramabild hat nur zwei Koordinaten $(x,y)$

Lassen wir den zoom mal weg und gehen davon aus, dass 180 angezeigt werden (Level 0). Wir gehen ferner davon aus, dass das Element relativ zur unteren linken Ecke des aktuellen Ausschnitts platziert wurde. Es wird einfacher, wenn wir den vertikalen Zoom von (-90,...,90) nach (0,...,180) vorher umrechnen.

Nehmen wir an, dass die Kamera von der Ausrichtung [mm] $(z_1,p_1,t_1)$ [/mm] nach [mm] $(z_2,p_2,t_)$ [/mm] schwenkt.

Du hast doch bereits (wie in deiner Mitteilung geschrieben)
$dx = [mm] \frac{w}{180}(p_1-p_2)$ [/mm]
$dy = [mm] \frac{h}{180}(t_1-t_2)$ [/mm]

Jetzt musst du nur das Element um die beiden Werte verschieben.
Wo ist jetzt dein problem konkret?


Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Softwaretechnik und Programmierung"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.vorwissen.de
[ Startseite | Mitglieder | Teams | Forum | Wissen | Kurse | Impressum ]