Эффективное получение позиций изометрической сетки в ограничивающей рамке

Isometric Grid

У меня есть изометрическая система сетки, координаты которой начинаются с [0,0] в левом углу сетки (угол, показанный на изображении выше), а x увеличивается в сторону нижняя часть изображения и y, увеличивающиеся по направлению к верху (таким образом, [0, height] будет верхним углом, а [width, 0] будет нижним углом в ромбовидной форме с шириной и высотой, являющимися размером сетки, т.е. 200 x 200 квадратов)

В любом случае мне нужна помощь, так это получение массива позиций изометрической сетки, которые содержатся в синем поле, показанном на изображении. За исключением итерации по каждой позиции экрана x, y и получения соответствующей позиции сетки (см. Этот вопрос, который я задал ранее, о том, как преобразовать положение экрана в положение сетки Получить строку / столбец на изометрической сетке. ) Я не уверен, как добиться этого эффективно.

Был вопрос, который я нашел ранее, почти точно такой же Ссылка здесь. Ответ заключался в том, чтобы отобразить сетку в изображение с разными цветами для каждого квадрата сетки, а затем определить, какие цвета присутствовали под квадратом. Я реализовал это решение, но оно довольно медленное! Я почти думаю, что проверка положения сетки для каждого пикселя в поле выбора будет быстрее. Почему, о, почему javascript такой медленный при зацикливании!

Мне действительно нужно математическое решение этой проблемы, основанное на моей системе координат, но я не могу придумать что-то, что работает (и обрабатывает поле выбора, выходящее за пределы сетки также)

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

Изменить: К сожалению, предоставленные ответы пока не сработали, так как выбор подобен выделенной области ромба на квадратной сетке, действительно нет верхнего левого, нижнего правого углов, чтобы перебирать, если я не пропустил суть ответов? Я оптимизировал подход к рендерингу, но при большом выборе он по-прежнему добавляет заметное падение кадров, поскольку он перебирает все цвета проверки пикселей и получает соответствующий квадрат

17
задан Community 23 May 2017 в 12:11
поделиться