Another Quick Programming Tip comes today. Since I searched through google how to get a the box generated by two overlapping AABBs and found nothing, I found the answer myself and thought it would be good to share it here, so here it goes!

The Question:

You got two AABBs, you know they intersect, and you want to find this inner area, how would you proceed?







Whenever you have two cubes intersecting, their intersection make a new box. This is easily viewable on rects:

But now, how would one get this box?

The Answer:

First, you’ll need your AABBs in the form

Rectangle { Vector3 min; Vector3 max; }

The idea is simple. View each axis separately.

There’s a small problem we often have to solve and it’s very simple, which is when you have two 1D lines intersecting and you want to know how much of them overlap. Take a look at some more paint art again:

The idea is simple, you’ve probably done it before. Getting the size of this intersection is as simple as:

overlappingSize = min(max1, max2) - max(min1, min2);

Now what if you want to find the line itself? Easy:

start = max(min1, min2); end = min(max1, max2);

So, now take a look again how we went from cubes, to rects, to lines. The problem is exactly. the. same. But with 3 dimensions instead of 1!

Yeah! Getting the overlapping rect for two rects is as easy as:

Vector2 min = Vector2(max(min1.x, min2.x), max(min1.y, min2.y)); Vector2 max = Vector2(min(max1.x, max2.x), min(max1.y, max2.y));

For AABBs? Yep, you guessed it, the same:

Vector3 min = Vector3(max(min1.x, min2.x), max(min1.y, min2.y), max(min1.z, min2.z)); Vector3 max = Vector3(min(max1.x, max2.x), min(max1.y, max2.y), min(max1.z, max2.z))

Just play attention to the fact that, if you swap your Min and Max vectors, maybe the results will come out wrong! So sort it out.

And that’s it! Was it hard? I hope it’s useful to you somewhere!