Sie müssen die Transformationsmatrix von Kachelraumkoordinaten zu Bildschirmraumkoordinaten bestimmen und dann die inverse Matrix dafür berechnen , die sie bei Anwendung auf Bildschirmraumkoordinaten in Kachelraumkoordinaten umwandelt.
Übrigens: Ihr Versatz zeigt tatsächlich auf eine Stelle, die sich in einem vernünftigen Koordinatensystem (0,0, 1,0) befinden würde, aber das ist kein großes Problem, nur etwas, das Sie beachten sollten. Dies bedeutet, dass der Versatz des Ursprungs Ihres transformierten Koordinatensystems bei (Versatz + 32, 0) liegt.
Sonderfall
Um die Kachelraumkoordinaten (a, b) in Bildschirmraumkoordinaten (x, y) umzuwandeln, müssen Sie im Grunde die folgende Transformationsmatrix durchlaufen:
Definitionen: a und b für die Kachel (0, 0) liegen im Bereich [0.0, 1.0), wobei (0.0, 0.0) die obere Ecke, (1.0, 1.0) die untere Ecke, (0.0, 1.0) die linke Ecke ist und (1.0, 0.0) die rechte Ecke im Bildschirmbereich.
Wir erweitern die Koordinatendefinitionen um eine konstante dritte Koordinate (es ist immer genau 1), um die Translation in die Matrix integrieren zu können.
Jetzt können Sie die inverse Matrix für diese Transformation erstellen . Die Grundformel lautet:
... wobei C die Matrix der Cofaktoren für A ist .
In Ihrem Fall ist die Determinante | A | ist immer 1024, unabhängig vom Offset. Die inverse Matrix lautet also:
Beispielrechnung
Nun zu Ihren Beispieldaten ...
Geben Sie Ihre Zahl für den Versatz in die Formel ein und Sie erhalten:
Durch Multiplizieren (105, 100, 1) (der Bildschirmkoordinaten) mit der Matrix erhalten Sie:
Da die dritte Koordinate immer 1 ist, müssen wir sie nicht berechnen. Wenn Sie auf die nächste ganze Zahl abrunden, erhalten Sie wie erwartet (1, 4) als Kachelkoordinaten.
Allgemeine dimetrische Projektionsmatrizen
Wenn Sie eine Perspektive wie diese haben, bei der jede Kachel 2 W in der Breite (64 im Beispiel, also w = 32) und 2 H in der Höhe (32 im Beispiel, also h = 16) und der Versatz des Ursprungspunkts ist Wenn der Bildschirmraum f x und f y für die horizontale bzw. vertikale Achse ist (192 und 0 im Beispiel), sehen die Matrizen wie folgt aus.
Kacheln Sie den Platz auf dem Bildschirm
Platz auf dem Bildschirm, um Platz zu kacheln