1
0
forked from josh/j3ml

Implement AABB2D

This commit is contained in:
2024-01-29 03:16:50 -05:00
parent 16c8dd1998
commit 6c7d63e467

View File

@@ -12,6 +12,7 @@ namespace Geometry
Vector2 minPoint; Vector2 minPoint;
Vector2 maxPoint; Vector2 maxPoint;
AABB2D() {}
AABB2D(const Vector2& min, const Vector2& max): AABB2D(const Vector2& min, const Vector2& max):
minPoint(min), maxPoint(max) minPoint(min), maxPoint(max)
{} {}
@@ -33,7 +34,7 @@ namespace Geometry
maxPoint = Vector2::Max(maxPoint, point); maxPoint = Vector2::Max(maxPoint, point);
} }
bool Intersects(const AABB2D &rhs) const bool Intersects(const AABB2D& rhs) const
{ {
return maxPoint.x >= rhs.minPoint.x && return maxPoint.x >= rhs.minPoint.x &&
maxPoint.y >= rhs.minPoint.y && maxPoint.y >= rhs.minPoint.y &&
@@ -41,13 +42,13 @@ namespace Geometry
rhs.maxPoint.y >= minPoint.y; rhs.maxPoint.y >= minPoint.y;
} }
bool Contains(const AABB2D &rhs) const bool Contains(const AABB2D& rhs) const
{ {
return rhs.minPoint.x >= minPoint.x && rhs.minPoint.y >= minPoint.y return rhs.minPoint.x >= minPoint.x && rhs.minPoint.y >= minPoint.y
&& rhs.maxPoint.x <= maxPoint.x && rhs.maxPoint.y <= maxPoint.y; && rhs.maxPoint.x <= maxPoint.x && rhs.maxPoint.y <= maxPoint.y;
} }
bool Contains(const vec2d &pt) const bool Contains(const Vector2& pt) const
{ {
return pt.x >= minPoint.x && pt.y >= minPoint.y return pt.x >= minPoint.x && pt.y >= minPoint.y
&& pt.x <= maxPoint.x && pt.y <= maxPoint.y; && pt.x <= maxPoint.x && pt.y <= maxPoint.y;
@@ -79,9 +80,27 @@ namespace Geometry
return minPoint + normalizedPos.Mul(maxPoint - minPoint); return minPoint + normalizedPos.Mul(maxPoint - minPoint);
} }
Vector2 ToNormalizedLocalSpace(const vec2d &pt) const Vector2 ToNormalizedLocalSpace(const Vector2 &pt) const
{ {
return (pt - minPoint).Div(maxPoint - minPoint); return (pt - minPoint).Div(maxPoint - minPoint);
} }
AABB2D operator+(const Vector2& pt) const
{
AABB2D a;
a.minPoint = minPoint + pt;
a.maxPoint = maxPoint + pt;
return a;
}
AABB2D operator-(const Vector2& pt) const
{
AABB2D a;
a.minPoint = minPoint - pt;
a.maxPoint = maxPoint - pt;
return a;
}
}; };
} }