From 62bc951474b190f4d22012708d59cf010310b9e7 Mon Sep 17 00:00:00 2001 From: Lane Kolbly Date: Sun, 13 Aug 2017 06:36:22 -0500 Subject: Shortened DoIntervalsIntersect to two comparisons, made inline. (#3883) * Shortened DoIntervalsIntersect to two comparisons, made inline. * Applied DeMorgan's * a_Max1 => a_Max2 * Moved DoIntervalsIntersect definition into header file. * Moved DoesIntersect into header. * Unindented line --- src/Cuboid.h | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'src/Cuboid.h') diff --git a/src/Cuboid.h b/src/Cuboid.h index 3ade5bc20..ae4fed538 100644 --- a/src/Cuboid.h +++ b/src/Cuboid.h @@ -40,7 +40,18 @@ public: /** Returns true if the cuboids have at least one voxel in common. Both coords are considered inclusive. Assumes both cuboids are sorted. */ - bool DoesIntersect(const cCuboid & a_Other) const; + inline bool DoesIntersect(const cCuboid & a_Other) const + { + ASSERT(IsSorted()); + ASSERT(a_Other.IsSorted()); + + // In order for cuboids to intersect, each of their coord intervals need to intersect + return ( + DoIntervalsIntersect(p1.x, p2.x, a_Other.p1.x, a_Other.p2.x) && + DoIntervalsIntersect(p1.y, p2.y, a_Other.p1.y, a_Other.p2.y) && + DoIntervalsIntersect(p1.z, p2.z, a_Other.p1.z, a_Other.p2.z) + ); + } bool IsInside(const Vector3i & v) const { @@ -95,6 +106,17 @@ public: /** If needed, expands the cuboid so that it contains the specified point. Assumes sorted. Doesn't contract. */ void Engulf(const Vector3i & a_Point); + +private: + + /** Returns true if the two specified intervals have a non-empty union */ + inline static bool DoIntervalsIntersect(int a_Min1, int a_Max1, int a_Min2, int a_Max2) + { + ASSERT(a_Min1 <= a_Max1); + ASSERT(a_Min2 <= a_Max2); + return ((a_Min1 <= a_Max2) && (a_Max1 >= a_Min2)); + } + } ; // tolua_end -- cgit v1.2.3