# How to perform simple collision detection?

Imagine two squares sitting side by side, both level with the ground like so:

A simple way to detect if one is hitting the other is to compare the location of each side. They are touching if all of the following are false:

• The right square's left side is to the right of the left square's right side.
• The right square's right side is to the left of the left square's left side.
• The right square's bottom side is above the left square's top side.
• The right square's top side is below the left square's bottom side.

If any of those are true, the squares are not touching. But consider a case like this, where one square is at a 45 degree angle:

Is there an equally simple way to determine if those squares are touching?

-
What language are you using? if the squares are images and you use canvas, you could make a simple-ish function detecting the pixel to pixel position. – justanotherhobbyist Mar 24 '12 at 17:35
You shouldn't do pixel collision detection. It's far too slow compared to more elegant algorithms like SAT. – ktodisco Mar 24 '12 at 17:46
@hustlerinc I'm using C++. The squares will be bitmaps drawn using Direct2D. I don't know what you mean by "use canvas". – Rob Mar 24 '12 at 17:53
@ktodisco I'm storing the coordinates of each square so it's just an if statement with up to four comparisons between floats. That is slower than the SAT? – Rob Mar 24 '12 at 17:55
@Rob your extension assumes that one square is always axis-aligned. It will not work if both squares are rotated. – ktodisco Mar 24 '12 at 18:00