Die übersetzung zwischen kartesischen und Bildschirm-Koordinaten
Für mein Spiel brauche ich Funktionen übersetzen zwischen zwei Koordinatensystemen. Nun, es ist vor allem Mathe Frage, aber was ich brauche, ist der C++ - code, es zu tun und ein bisschen Erklärung, wie Sie zu lösen mein Problem.
Bildschirm-Koordinaten:
a) die Obere linke Ecke ist 0,0
b) keine minus-Werte
c) rechts += x (die mehr ist x-Wert, desto mehr rechts ist Punkt)
d) unten +y =
Kartesische 2D-Koordinaten:
a) mittlere Punkt (0, 0)
b) minus-Werte existieren
c) rechts += x
d) unten= y (weniger ist y, der mehr an der Unterseite ist der Punkt)
Ich brauche eine einfache Möglichkeit, zu übersetzen, von einem system zu einem anderen und Umgekehrt. Um das zu tun, (ich denke) muss ich einige Kenntnisse, wie, wo ist die (0, 0) [oben Links im Bildschirm-Koordinaten] gesetzt in den kartesischen Koordinaten.
Allerdings gibt es ein problem, dass für einige Punkt in kartesischen Koordinaten nach der übersetzung auf dem Bildschirm, die position in Bildschirmkoordinaten kann minus, das ist Unsinn. I cant linken oberen Ecke der Bildschirm-Koordinaten in (-inifity, +unendlich) kartesischen Koordinaten...
Wie kann ich dieses Problem lösen? Die einzige Lösung, die ich denken kann, ist auf Platz Bildschirms (0, 0) im kartesischen (0, 0) und nur der IV Quartal des kartesischen Systems, aber in diesem Fall mit kartesischen system ist sinnlos...
Ich bin sicher, es gibt Möglichkeiten für die übersetzung der Bildschirm-Koordinaten in kartesische Koordinaten und Umgekehrt, aber ich mache etwas falsch in meinem denken mit, die minus-Werte.
er will negative Koordinaten
die Y-Achse ist anders, Bildschirm und Kartesisch.
Ich nehme Ihr Wort für es, aber ich dachte, Kartesisch bedeutet nur, es ist R^2 mit L2-Metrik (en.wikipedia.org/wiki/Cartesian_coordinate_system). Sie können es drehen wie man will, so lange, wie das Umblättern/transformation ist eine Isometrie.
gut du hast Recht, aber ich denke, die Frage ist understable.
InformationsquelleAutor user1873947 | 2013-02-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der grundlegende Algorithmus zum übersetzen von kartesischen Koordinaten in screen-Koordinaten sind
Aber wie Sie bereits erwähnt, kartesischen Raum ist unendlich, und Ihr Platz auf dem Bildschirm nicht. Dies kann gelöst werden, einfach durch ändern der Auflösung zwischen Platz auf dem Bildschirm und kartesischen Raum. Der obige Algorithmus ist 1-Einheit im kartesischen Raum = 1 Einheit/pixel Platz auf dem Bildschirm. Wenn Sie erlauben, für andere Verhältnisse, können Sie die "zoom" -, oder in Platz auf dem Bildschirm, um alle kartesischen Raum notwendig.
Dies würde sich ändern, die oben beschriebenen Algorithmus zu
Nun behandeln Sie negative (oder zu große) screenX und screenY durch ändern der zoom-Faktor, bis alle Ihre kartesischen Koordinaten auf den Bildschirm passen.
Könnte man auch ermöglichen das schwenken des Koordinatenraum zu, Bedeutung, so dass die Mitte des kartesischen Raum werden aus der Mitte Ihres Bildschirms. Dies könnte auch helfen, damit Ihr zoom_factor zu bleiben, so dicht wie möglich, aber passen auch die Daten nicht gleichmäßig verteilt um den Ursprung des kartesischen Raum.
Dies würde sich ändern, dass der Algorithmus
InformationsquelleAutor MerickOWA
Müssen Sie wissen, die Größe des Bildschirms, um in der Lage zu konvertieren
Konvertieren Kartesisch:
Konvertieren Bildschirm:
Fällen, in denen man einen negativen screen-Wert zur Verfügung:
Ich würde nicht diese Gedanken, dieser content wird einfach abgeschnitten werden, so wird der Benutzer nicht sehen. Wenn diese ist ein problem, ich möchte hinzufügen, einige Einschränkungen, die verhindern, dass das kartesische Koordinate zu groß. Eine andere Lösung, da Sie nicht haben, die Kanten werden +/- unendlich, wäre die Skalierung der Koordinaten (z.B. 1 pixel = 10 Kartesisch) nennen wir diese
scalefactor
. Die Gleichungen sind nun:Konvertieren kartesischen mit Skala-Faktor:
Konvertieren Bildschirm mit Skala-Faktor:
InformationsquelleAutor sgonzalez
Müssen Sie wissen, die Breite und Höhe des Bildschirms.
Dann können Sie tun:
Und:
InformationsquelleAutor Daniel A.A. Pelsmaeker
Du wirst immer das problem haben, dass das Ergebnis könnte aus dem Bildschirm-wahlweise in einen negativen Wert oder einen Wert größer als der verfügbare Bildschirm-Größe.
Manchmal nicht so wichtig: z.B. wenn Ihre grafische API akzeptiert negative Werte und clips Ihrer Zeichnung für Sie. Manchmal ist es egal, und für diese Fälle sollten Sie eine Funktion, die prüft, ob eine Reihe von Bildschirm-Koordinaten auf dem Bildschirm.
Könnten Sie auch schreiben Sie Ihre eigenen clipping-Funktionen, die versuchen, etwas zu tun, vernünftig mit den Koordinaten, die fallen aus dem Bildschirm (wie etwa das abschneiden der negativen Bildschirm-Koordinaten auf 0 und die Koordinaten, die sind zu groß, um die maximale Bildschirm-Koordinate). Beachten Sie jedoch, dass "angemessene" hängt davon ab, was Sie zu tun versuchen, so könnte es am besten sein, halten Sie sich auf die Definition solcher Funktionen, bis Sie Sie wirklich benötigen.
In jedem Fall, wie die anderen Antworten gemerkt haben, können Sie konvertieren zwischen den Koordinatensystemen:
und
InformationsquelleAutor comingstorm
Habe ich einige boost-c++ - für Sie-basierend auf microsoft-Artikel:
https://msdn.microsoft.com/en-us/library/jj635757(v=vs. 85).aspx
Müssen Sie nur wissen, zwei Bildschirm-Punkte und zwei Punkte in deinem Koordinatensystem. Dann können Sie konvertieren Punkt, von einem system zu einem anderen.
InformationsquelleAutor Serov Danil