Box2D.h
Go to the documentation of this file.
00001 /*******************************************************************************
00002  *  Box2D.h
00003  *
00004  *  (C) 2008 AG Aktives Sehen <agas@uni-koblenz.de>
00005  *           Universitaet Koblenz-Landau
00006  *
00007  *  Additional information:
00008  *  $Id: Box2D.h 44313 2011-04-06 22:46:28Z agas $
00009  *******************************************************************************/
00010 
00011 #ifndef Box2D_H
00012 #define Box2D_H
00013 
00014 #include "Point2D.h"
00015 #include <vector>
00016 
00022 template<class T=float>
00023 class Box2D
00024 {
00025 
00026   public:
00027 
00029     Box2D(T minX=0, T minY=0, T maxX=0, T maxY=0);
00030 
00032     ~Box2D() {};
00033 
00034     inline void setMinX(T value) { m_MinX=value; }
00035     inline void setMaxX(T value) { m_MaxX=value; }
00036     inline void setMinY(T value) { m_MinY=value; }
00037     inline void setMaxY(T value) { m_MaxY=value; }
00038 
00039     inline T minX() const { return m_MinX; }
00040     inline T maxX() const { return m_MaxX; }
00041     inline T minY() const { return m_MinY; }
00042     inline T maxY() const { return m_MaxY; }
00043 
00044     inline T width() const { return m_MaxX-m_MinX; }
00045     inline T height() const { return m_MaxY-m_MinY; }
00046 
00047     std::vector< Point2D > vertices();
00048 
00050     void clip( Box2D<T> clipArea );
00051 
00053     bool contains( T x, T y );
00054 
00056     void expand( T size );
00057 
00059     void shrink( T size );
00060 
00062     void enclose( Point2D point );
00063     void enclose( T x, T y );
00064 
00065     template<class OtherT>
00066     void enclose( Box2D<OtherT> box );
00067 
00068     Point2D centerPoint()
00069     {
00070         Point2D center;
00071         center.setX(m_MinX + ( (m_MaxX - m_MinX) / 2 ) );
00072         center.setY(m_MinY + ( (m_MaxY - m_MinY) / 2 ) );
00073         return center;
00074     }
00075 
00077     T area();
00078 
00079     Box2D<T>& operator/= ( T div ) { m_MinX/=div; m_MinY/=div; m_MaxX/=div; m_MaxY/=div; return *this; }
00080     Box2D<T>& operator*= ( T div ) { m_MinX*=div; m_MinY*=div; m_MaxX*=div; m_MaxY*=div; return *this; }
00081 
00082   private:
00083 
00084     T m_MinX;
00085     T m_MaxX;
00086     T m_MinY;
00087     T m_MaxY;
00088 
00089 };
00090 
00091 template<class T>
00092 Box2D<T>::Box2D(T minX, T minY, T maxX, T maxY)
00093 {
00094   m_MinX=minX;
00095   m_MinY=minY;
00096   m_MaxX=maxX;
00097   m_MaxY=maxY;
00098 }
00099 
00100 template<class T>
00101 void Box2D<T>::clip( Box2D<T> clipArea )
00102 {
00103   if (m_MinX < clipArea.minX()) { m_MinX=clipArea.minX(); }
00104   if (m_MinY < clipArea.minY()) { m_MinY=clipArea.minY(); }
00105   if (m_MaxX > clipArea.maxX()) { m_MaxX=clipArea.maxX(); }
00106   if (m_MaxY > clipArea.maxY()) { m_MaxY=clipArea.maxY(); }
00107 }
00108 
00109 template<class T>
00110 bool Box2D<T>::contains( T x, T y )
00111 {
00112   return ( (x>=m_MinX) && (x<=m_MaxX) && (y>=m_MinY) && (y<=m_MaxY) );
00113 }
00114 
00115 template<class T>
00116     void Box2D<T>::expand( T size )
00117 {
00118   m_MinX-=size;
00119   m_MaxX+=size;
00120   m_MinY-=size;
00121   m_MaxY+=size;
00122 }
00123 
00124 template<class T>
00125 void Box2D<T>::shrink( T size )
00126 {
00127   m_MinX+=size;
00128   m_MaxX-=size;
00129   m_MinY+=size;
00130   m_MaxY-=size;
00131 }
00132 
00133 template<class T>
00134 T Box2D<T>::area()
00135 {
00136   T width = m_MaxX - m_MinX;
00137   T height = m_MaxY - m_MinY;
00138 
00139   T capacity = width * height;
00140 
00141   return (T) capacity;
00142 }
00143 
00144 template<class T>
00145 void Box2D<T>::enclose( Point2D point )
00146 {
00147   if ( m_MinX > point.x() ) { m_MinX=point.x(); }
00148   if ( m_MinY > point.y() ) { m_MinY=point.y(); }
00149   if ( m_MaxX < point.x() ) { m_MaxX=point.x(); }
00150   if ( m_MaxY < point.y() ) { m_MaxY=point.y(); }
00151 }
00152 
00153 template<class T>
00154 void Box2D<T>::enclose( T x, T y )
00155 {
00156   if ( m_MinX > x ) { m_MinX=x; }
00157   if ( m_MinY > y ) { m_MinY=y; }
00158   if ( m_MaxX < x ) { m_MaxX=x; }
00159   if ( m_MaxY < y ) { m_MaxY=y; }
00160 }
00161 
00162 template<class T>
00163 template<class OtherT>
00164 void Box2D<T>::enclose( Box2D<OtherT> box )
00165 {
00166   enclose( box.minX(), box.minY() );
00167   enclose( box.maxX(), box.maxY() );
00168 }
00169 
00170 
00171 template<class T>
00172 std::vector< Point2D > Box2D<T>::vertices()
00173 {
00174   std::vector<Point2D> myVertices(5);
00175   myVertices[0]=Point2D( m_MinX-0.5, m_MinY-0.5 );
00176   myVertices[1]=Point2D( m_MinX-0.5, m_MaxY+0.5 );
00177   myVertices[2]=Point2D( m_MaxX+0.5, m_MaxY+0.5 );
00178   myVertices[3]=Point2D( m_MaxX+0.5, m_MinY-0.5 );
00179   myVertices[4]=myVertices[0];
00180   return myVertices;
00181 }
00182 
00183 
00184 #endif


robbie_architecture
Author(s): Viktor Seib
autogenerated on Mon Oct 6 2014 02:53:09