Основная идея состоит в том, чтобы создать битовую маску для каждого объекта, где вы указываете в каждом пикселе, есть ли объект на самом деле там или нет.Затем вы сравниваете каждый пиксель битовых масок для двух объектов.
Вы можете минимизировать количество пикселей, которое необходимо проверить, рассчитав прямоугольную область, в которой перекрываются два ограничивающих прямоугольника.Вам необходимо проверить пиксели в этой области.
Переберите все эти пиксели и проверьте, заполнен ли пиксель обоими объектами.Если какой-либо из них, то у вас есть столкновение.
Если ваши прямоугольники выровнены по оси x / y, чтобы найти перекрытие, найдите левый, правый, верхний и нижний участки перекрытия.Это выглядело бы примерно так (я мог бы испортить крайние случаи, не пробовал это):
int left = max(obj1.left, obj2.left)
int right = min(obj1.right, obj2.right)
int top = min(obj1.top, obj2.top)
int bottom = max(obj1.bottom, obj2.bottom)
for (int x = left; x < right; x++) {
for (int y = top; y < bottom; y++) {
if (obj1.isFilled(x,y) && obj2.isFilled(x,y)) {
return true;
}
}
}