Main Page   Packages   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Search  

C:/temp/src/j2k/Beta/Geometry/JCircle.hpp

Go to the documentation of this file.
00001 // Member function definitions for class JCircle
00002 #include <j2k/Fred/Standard.hpp>
00003 #include <j2k/Fred/MathCst.hpp>
00004 
00005 // Check if the parameters are defined...
00006 #ifndef Type
00007   #error "Type is not defined."
00008 #endif
00009 
00010 #ifndef  FType 
00011   #error "FType is not defined."
00012 #endif
00013 
00014 #ifndef JPoint  
00015   #error "JPoint is not defined."
00016 #endif
00017 
00018 #ifndef JPoint_t
00019   #error "JPoint_t is not defined."
00020 #endif
00021 
00022 #ifndef JCircle 
00023   #error "JCircle is not defined."
00024 #endif
00025 
00026 #ifndef JCircle_t
00027   #error "JCircle_t is not defined."
00028 #endif
00029 
00030 struct JCircle_t {
00031    FType radius;                        // radius of the Circle
00032    FType area_cache;                    // Cached Area is valid, if > 0
00033 };
00034 
00035 class JCircle : public JPoint {
00036 public:
00037     // Default Constructor
00038     inline JCircle() : JPoint()
00039     {
00040        memset( &c, 0, sizeof( JCircle_t ) );
00041     }
00042 
00043     inline JCircle( Type X ) : JPoint( X )
00044     {
00045        memset( &c, 0, sizeof( JCircle_t ) );
00046     }
00047 
00048     inline JCircle( Type X, Type Y ) : JPoint( X, Y )
00049     {
00050        memset( &c, 0, sizeof( JCircle_t ) );
00051     }
00052 
00053     inline JCircle( Type X, Type Y, FType Radius ) : JPoint( X, Y )
00054     {
00055        memset( &c, 0, sizeof( JCircle_t ) );
00056        c.radius = Radius;
00057        c.area_cache = -1;
00058        check();
00059     }
00060 
00061    inline JCircle( const JCircle& src ) : JPoint( (const JPoint&)src )
00062    {
00063      // memcpy( &pt, &src.pt, sizeof( JPoint_t  ) );
00064      memcpy( &c,  &src.c,  sizeof( JCircle_t ) );
00065    }
00066 
00067    inline const JCircle&  operator=( const JCircle& src )
00068    {
00069      memcpy( &pt, &src.pt, sizeof( JPoint_t  ) );
00070      memcpy( &c,  &src.c,  sizeof( JCircle_t ) );
00071      return *this;
00072    }
00073    
00074    // Compare only XY
00075    inline BOOL  operator==( const JCircle& src )
00076    {
00077      return !memcmp( &pt, &src.pt, (sizeof( Type ) * 2)  ) &&
00078              ( c.radius == src.c.radius);
00079    }
00080 
00081    inline BOOL  operator!=( const JCircle& src )
00082    {
00083      return  memcmp( &pt, &src.pt, (sizeof( Type ) * 2)  ) ||
00084              ( c.radius != src.c.radius);
00085    }
00086 
00087    inline const JCircle&  operator++()
00088    {
00089       JPoint::operator++();
00090       return *this;
00091    }
00092 
00093    inline const JCircle&  operator++( int )
00094    {
00095       JPoint::operator++( 0 );
00096       return *this;
00097    }
00098 
00099    inline const JCircle&  operator--()
00100    {
00101       JPoint::operator--();
00102       return *this;
00103    }
00104 
00105    inline const JCircle&  operator--( int )
00106    {
00107       JPoint::operator--( 0 );
00108       return *this;
00109    }
00110 
00111    /////////////////////////////////////////////////
00112    ///  JCircle related functions.               ///
00113    /////////////////////////////////////////////////
00114     
00115     // Set radius
00116     inline void setRadius( FType r )
00117     {
00118       c.radius = r;
00119       check();
00120     }
00121 
00122     inline void check()
00123     {
00124       if ( c.radius <= 0 ) {
00125         c.radius = 0;
00126       }
00127     }
00128     
00129     // Get radius
00130     inline FType getRadius() const
00131     {
00132       return c.radius;
00133     }
00134     
00135     // Set the x and y coordinates
00136     inline JCircle&  setCircle( Type X, Type Y, FType Radius )
00137     {
00138        JPoint::setPoint( X, Y );
00139        c.radius = Radius;
00140        check();
00141        return *this;
00142     }
00143 
00144     // Set the x and y coordinates
00145     inline JCircle&  setPoint( Type X, Type Y )
00146     {
00147        JPoint::setPoint( X, Y );
00148        return *this;
00149     }
00150 
00151     // Calculate area of JCircle
00152     inline FType area() 
00153     {
00154       if ( c.area_cache < 0 ) {
00155         c.area_cache = Math_PI * c.radius * c.radius;
00156       }
00157       return c.area_cache;
00158     }
00159     
00160     ////////////////////////////////////////////////////////////////////
00161     ///  JPoint related functions.                                   ///
00162     ////////////////////////////////////////////////////////////////////
00163     
00164     // Set coordinates (r,t)
00165     inline JCircle&  setPolar( FType R, FType Theta )
00166     {
00167        JPoint::setPolar( R, Theta );
00168        return *this;
00169     }
00170     
00171     inline JCircle&  setX( Type X ) {
00172        JPoint::setX( X );
00173        return *this;
00174     }
00175     
00176     inline JCircle&  setY( Type Y ) {
00177        JPoint::setY( Y );
00178        return *this;
00179     }
00180     
00181     inline JCircle&  setR( FType R ) {
00182        JPoint::setR( R );
00183        return *this;
00184     }
00185     
00186     inline JCircle&  setAngle( FType Theta ) {
00187        JPoint::setAngle( Theta );
00188        return *this;
00189     }
00190     
00191    // Output Circle information in the form:
00192    // Center = [x, y]; Radius = #.##
00193    friend ostream& operator<<( ostream &os, const JCircle &Circ )
00194    {
00195      os << "Center = " << (const JPoint&)(Circ)
00196         << "; Radius = "
00197         << setiosflags( ios::fixed | ios::showpoint )
00198         << setprecision( 2 ) 
00199         << Circ.c.radius;
00200      return os;                          // Enable cascaded calls
00201    }
00202 
00203 protected:                               // accessible to derived classes
00204    struct JCircle_t c;
00205 };
00206 

Generated on Sun Oct 14 18:46:10 2001 for Standard J2K Library by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001