Давайте разберем это для x
.Во-первых, i
- это индекс ячейки.Он будет идти от 0 .. N
, где N - количество ячеек минус 1.
var x0 = Math.floor(i / 100) % 10
x0
- это позиция x, в которой находится группа 10x10, в которой находится ячейка. Поскольку каждая группа содержит 100 ячеек,это пол индекса, деленный на 100. Итак, подумайте о ячейке 201, это будет 2, что правильно.Вы должны работать по модулю (который возвращает остаток от деления), однако, для переноса после 10 групп.Подумайте о ячейке 2001, слово floor (2001/100) поместило бы в 20, поместите по модулю, хотя и это правильно 0 для позиции x.
x1 = Math.floor(i % 10)
x1
- это позиция x в группе 10x10,Это пол остатка деления на 10. 10 - потому что у нас есть 10 столбцов в каждой группе.Опять же, если вы проверите наши тесты 201 и 2001 года, они оба окажутся правильно во втором столбце.
Наконец, общая позиция:
groupSpacing * x0 + (cellSpacing + cellSize) * (x1 + x0 * 10);
, которая читается как (pixel group spacing * x0) + (pixel cell spacing + pixel cell size) * ((x0 * 10) + x1)
- интервал между пикселями для каждой группы
- размер ячейки и интервал для каждой ячейки
- x положение группы * 10 (потому что 10 столбцов в каждой группе)
- плюс позиция вкаждая группа