INTRODUCTION
Overview
Download and Install
Quick Start
Documentation
Publications

NONFRAMEWORK CODE
Driver Interfaces
Drivers
Libraries
Utilities

FRAMEWORK CODE
Interfaces
Components
Libraries
Utilities

Full Software Listings

DEVELOPER
Tutorials
Examples
Dev Guide
Dashboard

PEOPLE
Contributors
Users

SourceForge.net Logo
Project
Download
Mailing lists

 

         

cell2d.h

00001 /*
00002  * Orca-Robotics Project: Components for robotics 
00003  *               http://orca-robotics.sf.net/
00004  * Copyright (c) 2004-2009 Alex Brooks, Alexei Makarenko, Tobias Kaupp
00005  *
00006  * This copy of Orca is licensed to you under the terms described in
00007  * the LICENSE file included in this distribution.
00008  *
00009  */
00010 
00011 #ifndef ORCA2_CELL2D_H
00012 #define ORCA2_CELL2D_H
00013 
00014 #include <iostream>
00015 #include <vector>
00016 #include <list>
00017 
00018 namespace hydropathplan
00019 {
00020 
00024     class Cell2D
00025     {
00026     public:
00027         Cell2D( int x=0, int y=0);
00028         ~Cell2D() {};
00029 
00031         int x() const;
00033         int y() const;
00034 
00036         void setX( const int x);
00038         void setY( const int y);
00040         void set( const int x, const int y);
00041 
00043         Cell2D & operator= ( const Cell2D & p );// { x_=p.x_; y_=p.y_; return *this; };
00045         Cell2D & operator+= ( const Cell2D & );
00047         Cell2D & operator-= ( const Cell2D & );
00049         Cell2D & operator*= ( int );
00051         Cell2D & operator/= ( int );
00052 
00054         friend inline bool    operator== ( const Cell2D &, const Cell2D & );
00056         friend inline bool    operator!= ( const Cell2D &, const Cell2D & );
00058         friend inline const Cell2D operator+ ( const Cell2D &, const Cell2D & );
00060         friend inline const Cell2D operator- ( const Cell2D &, const Cell2D & );
00062         friend inline const Cell2D operator* ( const Cell2D &, int );
00064         friend inline const Cell2D operator* ( int, const Cell2D & );
00066         friend inline const Cell2D operator- ( const Cell2D & );
00067     private:
00068         int x_;
00069         int y_;
00070     };
00071 
00073     typedef std::vector<hydropathplan::Cell2D> Cell2DVector;
00075     typedef std::list<hydropathplan::Cell2D> Cell2DList;
00076 
00078     bool isIncluded( const Cell2DVector & C, const Cell2D & c );
00080     bool isIncluded( const Cell2DList & C, const Cell2D & c );
00081     
00082 
00083     /*****************************************************************************
00084      * Cell2D utility functions
00085      *****************************************************************************/
00086 
00089     double euclideanDistance( const Cell2D c1, const Cell2D c2 );
00090 
00093     int manhattanDistance( const Cell2D c1, const Cell2D c2 );
00094 
00097     bool isAdjacentN( const Cell2D c1, const Cell2D c2, unsigned int N );
00098 
00101     bool isNull( const Cell2D c );
00102 
00103     /*
00104     index for adjacentCell and diagonalCell
00105 
00106       0    0    1
00107 
00108      3    [c]    1
00109 
00110       3    2    2
00111 
00112     index for surroundCell
00113 
00114       7    0    4
00115 
00116      3    [c]    1
00117 
00118       6    2    5
00119     */
00120 
00125     Cell2D adjacentCell( const Cell2D & cell, const int i );
00126 
00131     Cell2D diagonalCell( const Cell2D & cell, const int i );
00132 
00137     Cell2D surroundCell( const Cell2D & cell, const int i );
00138     
00141     std::ostream& operator<<( std::ostream &s, const  Cell2D &obj );
00142 
00143     /*****************************************************************************
00144      * Cell2D inline member functions
00145      *****************************************************************************/
00146 
00147     inline Cell2D::Cell2D( int x, int y )
00148     { x_ = x; y_ = y; }
00149 
00150     inline int Cell2D::Cell2D::x() const
00151     { return x_; }
00152 
00153     inline int Cell2D::Cell2D::y() const
00154     { return y_; }
00155 
00156     inline void Cell2D::setX( const int x )
00157     { x_ = x; }
00158 
00159     inline void Cell2D::setY( const int y )
00160     { y_ = y; }
00161 
00162     inline void Cell2D::set( const int x, const int y )
00163     { x_ = x; y_ = y; }
00164 
00165     /*****************************************************************************
00166      * Cell2D arithmetic operator
00167      *****************************************************************************/
00168 
00169     //members
00170     inline Cell2D & Cell2D::operator= ( const Cell2D & p )
00171     { x_=p.x_; y_=p.y_; return *this; }
00172     
00173     inline Cell2D & Cell2D::operator+= ( const Cell2D &p )
00174     { x_+=p.x_; y_+=p.y_; return *this; }
00175 
00176     inline Cell2D & Cell2D::operator-= ( const Cell2D &p )
00177     { x_-=p.x_; y_-=p.y_; return *this; }
00178 
00179     inline Cell2D & Cell2D::operator*= ( int c )
00180     { x_*=c; y_*=c; return *this; }
00181 
00182     inline Cell2D & Cell2D::operator/= (int c)
00183     { if(c==0) return *this; x_/=c; y_/=c; return *this; }
00184 
00185     //friends
00186     inline bool operator==( const Cell2D &p1, const Cell2D &p2 )
00187     { return p1.x_ == p2.x_ && p1.y_ == p2.y_; }
00188 
00189     inline bool operator!=( const Cell2D &p1, const Cell2D &p2 )
00190     { return p1.x_ != p2.x_ || p1.y_ != p2.y_; }
00191 
00192     inline const Cell2D operator+( const Cell2D &p1, const Cell2D &p2 )
00193     { return Cell2D(p1.x_+p2.x_, p1.y_+p2.y_); }
00194 
00195     inline const Cell2D operator-( const Cell2D &p1, const Cell2D &p2 )
00196     { return Cell2D(p1.x_-p2.x_, p1.y_-p2.y_); }
00197 
00198     inline const Cell2D operator*( const Cell2D &p, int c )
00199     { return Cell2D(p.x_*c, p.y_*c); }
00200 
00201     inline const Cell2D operator*( int c, const Cell2D &p )
00202     { return Cell2D(p.x_*c, p.y_*c); }
00203 
00204     inline const Cell2D operator-( const Cell2D &p )
00205     { return Cell2D(-p.x_, -p.y_); }
00206 }
00207 
00208 #endif
00209 
00210 
00211 
 

Webmaster: Tobias Kaupp (tobasco at users.sourceforge.net)


Generated for Orca Robotics by  doxygen 1.4.5