Для определения коллизии между двумя квадратами можно использовать простой алгоритм:
Определить границы каждого квадрата, то есть вычислить координаты левого верхнего угла и правого нижнего угла для каждого квадрата.
Проверить, пересекаются ли границы квадратов по осям X и Y. Если пересекаются, значит квадраты могут столкнуться.
Для проверки столкновения на самом деле нам нужно убедиться, что оба квадрата пересекаются на самом деле, а не только их границы. Для этого нужно проверить, есть ли пересечение между сторонами квадратов.
Вот пример функции на JavaScript, которая реализует этот алгоритм:
function detectCollision(sq1, sq2) {
// вычисляем границы квадратов
const sq1_left = sq1.x;
const sq1_right = sq1.x + sq1.side;
const sq1_top = sq1.y;
const sq1_bottom = sq1.y + sq1.side;
const sq2_left = sq2.x;
const sq2_right = sq2.x + sq2.side;
const sq2_top = sq2.y;
const sq2_bottom = sq2.y + sq2.side;
// проверяем, пересекаются ли границы квадратов по осям X и Y
const x_collide = sq1_right >= sq2_left && sq1_left <= sq2_right;
const y_collide = sq1_bottom >= sq2_top && sq1_top <= sq2_bottom;
// если пересекаются, проверяем наличие пересечения сторон
if (x_collide && y_collide) {
const top_collision = sq1_bottom >= sq2_top && sq1_top <= sq2_top;
const bottom_collision = sq1_top <= sq2_bottom && sq1_bottom >= sq2_bottom;
const left_collision = sq1_right >= sq2_left && sq1_left <= sq2_left;
const right_collision = sq1_left <= sq2_right && sq1_right >= sq2_right;
return top_collision || bottom_collision || left_collision || right_collision;
}
return false;
}
Здесь sq1 и sq2 представляют объекты квадратов со следующими свойствами:
const square = {
x: 100, // координата левого верхнего угла по оси X
y: 50, // координата левого верхнего угла по оси Y
side: 30 // длина стороны квадрата
};
Эта функция возвращает true, если квадраты пересекаются, и false в противном случае