У меня есть набор плиток (изображение, полное других маленьких изображений). И я хочу получить одно из этих маленьких изображений, называемых тайлами, чтобы я мог что-то с ним сделать. Я знаю размер каждой плитки (все они одного размера). У меня есть два уравнения:
x = (i % tiles_hor) * tile_h
y = (i % tiles_ver) * tile_w
x = (i % tiles_hor) * tile_w
y = (i / tiles_hor) * tile_w
где i означает индекс плитки, которую я хочу получить;
tiles_hor — количество тайлов по горизонтали;
tiles_ver — количество плиток по вертикали;
tile_w и tile_h — ширина и высота каждой плитки внутри набора плиток соответственно;
Плитки получают свой индекс последовательно, вот так:
01 02 03 04 05
06 07 08 09 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
Таким образом, каждая пара цифр — это индекс плитки внутри набора плиток. Допустим, я хочу получить плитку 04 (при условии, что каждая плитка имеет размер 32x32): с первым уравнением:
x = (4 % 5) * 32 = 128. Таким образом, позиция x внутри изображения равна 128
y = (4 % 5) * 32 = 0. Таким образом, y внутри изображения равна 0;
со вторым уравнением:
x = (4 % 5) * 32 = 128. Таким образом, позиция x внутри изображения равна 128
y = (4 / 5) * 32 = 0. Здесь 0, потому что мы сначала округляем первое выражение до ближайшего младшего числа (я не знаю, верно ли мое выражение. Пожалуйста, поправьте меня, если это не так).
Обратите внимание, что мы рассматриваем идеальный квадратный набор плиток (в данном случае 5x5).
Мой вопрос:
Второй вариант работает в большинстве случаев. Первые перестают работать при отсутствии идеальных квадратов тайлсета и при большой высоте. Так что я там делаю не так?
Кроме того, как уравнение, которое выдает действительно важное значение (tiles_ver и tile_h), может быть правильным? Что мне там не хватает?