2D изометрический движок — математические задачи — выбор куба — карта в форме ромба

Я вычисляю свои координаты, когда создаю слой с std::vector, наполненный cube объекты (мой класс):

for(int J = 0; J < mapSize; J++)
{
for(int I = 0; I < mapSize; I++)
{
x = (J - I) * (cubeSize/2);
y = (J + I) * (cubeSize/4);

c = new cube(cubeSize, x, y, z, I, J);
cs.push_back(*c);
}
}

Я хочу сделать это: cs[getCubeByID(mouseX, mouseY)].setTexture(...);

Пример использования: куб в I-J [0, 0] иметь number 0 в массиве кубов. Если я click on 0,0 я получил этот номер

РЕДАКТИРОВАТЬ:
Мы дали мне формулу, чтобы получить J или a I с парой x, y в комментариях, большое спасибо. Мне нужно только преобразовать эту пару I-J в номер записи моего массива, как в примере, который я привел.

Я старался : int entry = (J - 1) * size + (I - 1); и выбранный куб не так далеко от того, который я хочу, но все еще не правильная формула. Модульная арифметика может решить мою проблему, но я не понимаю, как она работает.

0

Решение

Так что у тебя есть

x = (J - I) * (cubeSize/2);
y = (J + I) * (cubeSize/4);

и вы хотите вычислить I а также J (и, следовательно, индекс, который I + J*mapSize) от того, верно? Это линейная система двух уравнений.

J - I = x * 2 / cubeSize
J + I = y * 4 / cubeSize

I = (y * 2 - x) / cubeSize
J = (y * 2 + x) / cubeSize
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]