105 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			105 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								// NoesisGUI - http://www.noesisengine.com
							 | 
						||
| 
								 | 
							
								// Copyright (c) 2013 Noesis Technologies S.L. All Rights Reserved.
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef __MATH_AABBOX_H__
							 | 
						||
| 
								 | 
							
								#define __MATH_AABBOX_H__
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <NsCore/Noesis.h>
							 | 
						||
| 
								 | 
							
								#include <NsMath/Vector.h>
							 | 
						||
| 
								 | 
							
								#include <NsMath/Transform.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace Noesis
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								/// 2D Axis Aligned Bounding Box
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								class AABBox2
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								public:
							 | 
						||
| 
								 | 
							
								    /// Constructors
							 | 
						||
| 
								 | 
							
								    AABBox2();
							 | 
						||
| 
								 | 
							
								    AABBox2(const AABBox2& v) = default;
							 | 
						||
| 
								 | 
							
								    AABBox2(float minX, float minY, float maxX, float maxY);
							 | 
						||
| 
								 | 
							
								    AABBox2(const Vector2& min, const Vector2& max);
							 | 
						||
| 
								 | 
							
								    AABBox2(const Vector2& center, float halfSide);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // Copy operator
							 | 
						||
| 
								 | 
							
								    AABBox2& operator=(const AABBox2& box) = default;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Resets to empty bounding box
							 | 
						||
| 
								 | 
							
								    void Reset();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Returns ith corner point
							 | 
						||
| 
								 | 
							
								    ///         X   Y
							 | 
						||
| 
								 | 
							
								    /// [0] : (min,min)
							 | 
						||
| 
								 | 
							
								    /// [1] : (max,min)
							 | 
						||
| 
								 | 
							
								    /// [2] : (min,max)
							 | 
						||
| 
								 | 
							
								    /// [3] : (max,max)
							 | 
						||
| 
								 | 
							
								    Vector2 operator[](uint32_t i) const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Returns the minimal extents of the box
							 | 
						||
| 
								 | 
							
								    Vector2& Min();
							 | 
						||
| 
								 | 
							
								    const Vector2& Min() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Returns the maximal extents of the box
							 | 
						||
| 
								 | 
							
								    Vector2& Max();
							 | 
						||
| 
								 | 
							
								    const Vector2& Max() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Returns the center position of the box
							 | 
						||
| 
								 | 
							
								    Vector2 Center() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Returns the diagonal vector of the box
							 | 
						||
| 
								 | 
							
								    inline Vector2 Diagonal() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Expands bounding box to fit a given box
							 | 
						||
| 
								 | 
							
								    AABBox2& operator+=(const AABBox2& box);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Expands bounding box to fit the given point
							 | 
						||
| 
								 | 
							
								    AABBox2& operator+=(const Vector2& point);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Scales the box. The origin of the scale if the center of the box. 
							 | 
						||
| 
								 | 
							
								    AABBox2& Scale(float s);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Logic operators
							 | 
						||
| 
								 | 
							
								    bool operator==(const AABBox2& box) const;
							 | 
						||
| 
								 | 
							
								    bool operator!=(const AABBox2& box) const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Checks if the bounding box is empty
							 | 
						||
| 
								 | 
							
								    bool Empty() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								private:
							 | 
						||
| 
								 | 
							
								    Vector2 mMin, mMax;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/// Operators
							 | 
						||
| 
								 | 
							
								const AABBox2 operator+(const AABBox2& box0, const AABBox2& box1);
							 | 
						||
| 
								 | 
							
								const AABBox2 operator+(const AABBox2& box, const Vector2& point);
							 | 
						||
| 
								 | 
							
								const AABBox2 operator+(const Vector2& point, const AABBox2& box);
							 | 
						||
| 
								 | 
							
								const AABBox2 operator*(const AABBox2& box, const Transform2& mtx);
							 | 
						||
| 
								 | 
							
								const AABBox2 operator*(const AABBox2& box, float s);
							 | 
						||
| 
								 | 
							
								const AABBox2 operator*(float s, const AABBox2& box);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/// Checks if specified point is inside the bounding box
							 | 
						||
| 
								 | 
							
								bool Inside(const AABBox2& box, const Vector2& p);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/// Checks if b0 is fully inside b1
							 | 
						||
| 
								 | 
							
								bool BoxInside(const AABBox2& b0, const AABBox2& b1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								///  Checks if given bounding boxes overlap
							 | 
						||
| 
								 | 
							
								bool BoxesIntersect(const AABBox2& box0, const AABBox2& box1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/// Returns the intersection of given boxes
							 | 
						||
| 
								 | 
							
								AABBox2 Intersect(const AABBox2& box0, const AABBox2& box1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <NsMath/AABBox.inl>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 |