diff --git a/src/lol/math/geometry.h b/src/lol/math/geometry.h index 8122fa90..0f6c7363 100644 --- a/src/lol/math/geometry.h +++ b/src/lol/math/geometry.h @@ -60,13 +60,12 @@ struct Box3D static inline bool BoxIsectBox(Box2D const &b1, Box2D const &b2) { - vec2 c1 = 0.5f * (b1.A + b1.B); - vec2 c2 = 0.5f * (b2.A + b2.B); + vec2 dist = 0.5f * (b1.A - b2.A + b1.B - b2.B); vec2 e1 = 0.5f * (b1.B - b1.A); vec2 e2 = 0.5f * (b2.B - b2.A); - return abs(c1.x - c2.x) < abs(e1.x) + abs(e2.x) - || abs(c1.y - c2.y) < abs(e1.y) + abs(e2.y); + return abs(dist.x) < abs(e1.x) + abs(e2.x) + && abs(dist.y) < abs(e1.y) + abs(e2.y); } bool TriangleIsectTriangle(vec3 const &v00, vec3 const &v01, vec3 const &v02, diff --git a/test/unit/box.cpp b/test/unit/box.cpp index f59645d2..699a872b 100644 --- a/test/unit/box.cpp +++ b/test/unit/box.cpp @@ -32,6 +32,11 @@ LOLUNIT_FIXTURE(BoxTest) LOLUNIT_ASSERT_EQUAL(true, BoxIsectBox(b1, b2)); LOLUNIT_ASSERT_EQUAL(false, BoxIsectBox(b1, b3)); + + Box2D b4(vec2(96.f, 33.f), vec2(144.f, 129.f)); + Box2D b5(vec2(264.f, 91.f), vec2(244.f, 71.f)); + + LOLUNIT_ASSERT_EQUAL(false, BoxIsectBox(b4, b5)); } };