Преобразование координат в изометрии
Пытаюсь нарисовать изометрическую карту для игры. Имею следующие параметры:
- Ширина ячейки
- Высота ячейки
- Количество ячеек по ширине
- Количество ячеек по высоте
Карта хранится в двумерном массиве, ячейки обходятся вложенным циклом. На шаге цикла - индекс ячейки по x
и по y
. Если речь об обычной 2d-карте, то координата ячейки - это [x * cellWidth; y * cellHeight]
.
Планирую сделать функцию для перевода из экранных координат в изометрические. То есть, в цикле получаю те же [x * cellWidth; y * cellHeight]
, передаю их в функцию и получаю изометрические координаты с нужным смещением, чтобы ячейки перекрывали друг друга, как это бывает в изометрии. Эту же функцию планирую использовать для вывода обычных линий на экране. Например, чтобы вывести верхнюю границу карты, получаю 2 точки:
[0; 0]
[mapWidth * cellWidth; 0]
Передаю обе точки в функцию преобразования координат и затем по результирующим координатам рисую линию. И хотя в экранном пространстве это была горизонтальная линия, в финальном выводе линия будет наклонной.
Итак, вопроса всего два:
Возможно ли обойтись одной функцией преобразования координат для вывода и ячеек с перекрытием, и обычных линий в изометрическом пространстве?
Хватит ли имеющихся данных, чтобы написать такую функцию преобразования (размеры ячейки и количество ячеек по ширине и высоте)?
И если да, то подскажите формулу для преобразования координат.