#pragma once #include #include "Plane.h" #include "Sphere.h" using namespace LinearAlgebra; namespace Geometry { class AABB { static AABB FromCenterAndSize(const Vector3 FromSize); float MinX(); // Returns the smallest sphere that contains this AABB. // This function computes the minimal volume sphere that contains all the points inside this AABB Sphere MinimalEnclosingSphere() const; // Returns the largest sphere that can fit inside this AABB // This function computes the largest sphere that can fit inside this AABB. Sphere MaximalContainedSphere() const; Vector3 GetCentroid() const; // Quickly returns an arbitrary point inside this AABB Vector3 AnyPointFast() const; Vector3 PointInside(float x, float y, float z) const; // Returns an edge of this AABB LineSegment Edge(int edgeIndex) const; Vector3 CornerPoint(int cornerIndex); Vector3 ExtremePoint(const Vector3& direction) const; Vector3 ExtremePoint(const Vector3& direction, float projectionDistance); Vector3 PointOnEdge(int edgeIndex, float u) const; Vector3 FaceCenterPoint(int faceIndex) const; Vector3 FacePoint(int faceIndex, float u, float v) const; Vector3 FaceNormal(int faceIndex) const; Plane FacePlane(int faceIndex); static AABB MinimalEnclosingAABB(const Vector3* pointArray, int numPoints); Vector3 GetSize(); Vector3 GetVolume(); float GetVolumeCubed(); float GetSurfaceArea(); Vector3 GetRandomPointInside(); Vector3 GetRandomPointOnSurface(); Vector3 GetRandomPointOnEdge(); Vector3 GetRandomCornerPoint(); AABB Translated(const Vector3& offset) const; AABB TransformAABB(const Matrix3x3& transform); AABB TransformAABB(const Matrix4x4& transform); AABB TransformAABB(const Quaternion& transform); OBB Transform(const Matrix3x3& transform); OBB Transform(const Matrix4x4& transform); OBB Transform(const Quaternion& transform); bool Contains(const Vector3& point) const; bool Contains(const LineSegment& lineSegment) const; bool Contains(const AABB& aabb) const; bool Contains(const OBB& obb) const; bool Contains(const Sphere& sphere) const; bool C }; }