Вот тут программисту и нужна математика (совсем чуть чуть).
Квадрат - это все точки (X, Y), которые удовлетворяют неравенствам:
x1 <= X <= x1 + w1
y1 <= Y <= y1 + w1
Пересечение двух квадратов - это точки, которые удовлетворяют одновременно каждой паре неравенств, т.е. удовлетворяют сразу четырем неравенствам:
x1 <= X <= x1 + w1
y1 <= Y <= y1 + w1
x2 <= X <= x2 + w2
y2 <= Y <= y2 + w2
Тут уже видно, что фактически есть пара неравенств на X, и есть пара неравенств на Y. Они независимые. Вот и получается, что пересечение можно искать отдельно по каждой оси.
Рассмотрим одну пару:
x1 <= X <= x1 + w1
x2 <= X <= x2 + w2
Вообще, такие системы неравнеств решают в школе, классе этак в 7.
Сконцентрируемся на левых границах. Что значит, что X >= x1 и X >= x2? Это значит, что X больше обоих чисел x1 и x2. Это можно записать одним неравнеством - X больше максимума из двух чисел:
max(x1, x2) <= X
Так же и по правым границам:
X <= min(x1 + w1, x2 + w2)
В итоге:
max(x1, x2) <= X <= min(x1 + w1, x2 + w2)
Эти неравенства имеют решение, если левая граница не превосходит правой:
max(x1, x2) <= min(x1 + w1, x2 + w2)
Вот у вас условие, что по оси OX есть хоть одна точка пересечения. Если вам касающиеся квадраты не надо считать пересекающимеся, то замените знак
<=
на строгое неравенство.
Точно также проверьте, что есть пересечение по OY. Если пересечение есть и там и там, то квадраты пересекаются. Т.е. весь ваш код должен найти 2 минимума, 2 максимума, сделать 2 сравнения и соединить их через логичиское И.