Как перевести локальные координаты в изометрические?

имеется изометрическая сетка:
9ba782930c4846a096bf2f2636a0dbc8.png

строится она таким образом:
property int mapcols: 8 // ширина карты
    property int maprows: mapcols * 4 // высота карты
    property int cellsize: 96 // размер клетки, если бы она не была в изометрии :)
    property int cellsizew: cellsize // ширина тайла
    property int cellsizeh: cellsize / 2 // высота тайла

    function createTextures() {
        var cellcount = mapcols * maprows

        for(var id = 0; id < cellcount; id++) {
            // по индексу тайла (слева-направо, сверху-вниз) получаем 
            // номер колонки и номер строки
            var col = id % mapcols
            var row = Math.floor(id / mapcols)

            // находим координаты 
            // левого верхнего угла описывающего тайл прямоугольника
            var iseven = row / 2 == Math.floor(row / 2) // четная/нечетная строка
            var cx = iseven ? col * cellsizew : col * cellsizew + cellsizew/2
            var cy = iseven ? row * cellsizeh : row * cellsizeh - cellsizeh/2

            cy -= Math.floor(row/2) * cellsizeh

            var component = Qt.createComponent("Cell.qml")
            var cell = component.createObject(map, { "x": cx, "y": cy });
        }
    }


как найти координаты белой точки на изометрической сетке (т.е. по сути надо найти числа 2х4), зная локальные координаты этой точки в окне?
  • Вопрос задан
  • 609 просмотров
Решения вопроса 1
Пригласить эксперта
Ответы на вопрос 1
@DrSpritz
Я конечно не профи в 2д графике, но мне кажется у Вас какой-то странный подход =)
Но если это не учитывать, то я могу Вам предложить такое же странное решение, при условии что позиция Вашей камеры статична, в противном случае Вам не уйти от матриц (object, view и т.д.)

У Вас изометрия, т.е. никаких искажений, все линейно. Я думаю Вам стоит посчитать соотношение пикселей к локальным координатам. Отсчет идет у Вас с левого-верхнего угла, и явно видно что 1px по вертикали в локальных координатах в 2 раза больше чем по горизонтали. Выведите это соотношение и переливайте координаты в одну и другую сторону.

Я прошу прощения, метод явно извращенский :D
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы