Ich zeichne eine isometrische Karte mit der Kachel 64x32 :
const Offset = 160;
int X, Y;
for (int a=0; a < 6; a++)
for (int b=0; b < 6; b++) {
X = a * 32 - b * 32 + Offset;
Y = a * 16 + b * 16;
DrawTile(X, Y, tile);
}
Bild, das diesen Code illustriert:
Sehr geehrte Fachleute, bitte helfen Sie mit einer Formel zur Transformation von Mauskoordinaten in isometrische Indizes einer Zelle. Beispiel: (105; 100) -> [1; 4].
mathematics
algorithm
isometric
Alexan-Dwer
quelle
quelle
while(val = arr[i++])
oder ähnlichen Konstruktionen, verwenden Sie ihn nicht . Verwenden Sie stattdessen++a
und++b
.Antworten:
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.
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
quelle