0
$\begingroup$

I have 2 rectangles (black and blue), each of which are defined by 4 floating points values based on their location (left, top, right, bottom).

For example, a 25 x 25 rectangle might be defined as:

left = 400.0 right = 425.0 top = 300.0 bottom = 325.0f 

The upper left corner of that rectangle would be located at:

(400.0, 300.0). 

And the lower right corner of that rectangle would be located at:

(425.0, 325.0) 

The first rectangle is black and does not move. The second rectangle is blue and is capable of moving. I would like to determine which side (top, left, right or bottom) of the black rectangle is hit by the blue rectangle.

For example, in this situation, I would like to know that the blue rectangle hit the black rectangle on its bottom side:

enter image description here

The initial way that I thought about figuring this out was taking the minimum of these calculations:

|blue top - black bottom| |blue right - black left| |blue bottom - black top| |blue left - black right| 

In the above example, it would be clear that I was hitting the bottom but consider a situation like this:

enter image description here

The blue rectangle is still hitting the bottom of the black rectangle but the value:

|blue right - black left| 

may be less than or equal to:

|blue top - black bottom| 

Is there a better way using simple math to determine which side of the black rectangle is hit?

  • 0
    Consider projections into one dimention. Two rectangles are intersecting only if both their projections onto X and Y axes intersect (and you can calculate them using min and max functions).2012-12-16

1 Answers 1

0

blue top is hit iff black bottom $\le$ blue top $\le$ black top and blue left $\le$ black right and black left $\le$ blue right.