При определении границ для прямоугольника вам нужны только две точки, где каждая точка представляет противоположные углы. Вы можете рассматривать одну точку как значения min x и min y, в то время как другая представляет значения max x и max y.
Нахождение индекса ячейки сетки
Чтобы узнать, какой ячейкой сетки мы являемся мы можем использовать
index_x = math.floor(px / len);
index_y = math.floor(py / len);
Ограничивающий прямоугольник из индекса
Если мы хотим найти точки на исходной координатной плоскости, которые описывают ячейку сетки в (index_x, index_y)
, мы можем сделать это:
min_x = index_x * len;
min_y = index_y * len;
max_x = min_x + len;
max_y = min_y + len;
Способ по модулю
В более элегантной версии используется оператор по модулю для вычисления остатка координаты при делении на длину ячеек сетки. Мы можем получить минимальную координату, удалив остаток от координаты.
min_x = px - (px % len);
min_y = py - (py % len);
Нахождение центра
Если вы хотите установить центральную точку для ограничительной рамки, вы можете сделать следующее:
center_x = min_x + len / 2;
center_y = min_y + len / 2;
Это зависит от того, что у коробки есть ребра длины len
. Таким образом, центральная точка составляет половину длины от минимальных положений x и y.
Предупреждение
Если вы программируете это на компьютер, остерегайтесь Ошибка с плавающей запятой как это может вызвать некоторые неожиданные поведения. Как бы ни был хорош подход по модулю, он будет более подвержен ошибкам с плавающей запятой, чем math.floor
.