ellipse2D.h

Go to the documentation of this file.
00001 
00015 #ifndef DLR_GEOMETRY_ELLIPSE2D_H
00016 #define DLR_GEOMETRY_ELLIPSE2D_H
00017 
00018 #include <iostream>
00019 #include <dlrNumeric/vector2D.h>
00020 
00021 namespace dlr {
00022 
00023   namespace geometry {
00024     
00028     class Ellipse2D {
00029     public:
00030       
00034       inline
00035       Ellipse2D();
00036 
00037       
00053       inline
00054       Ellipse2D(const dlr::numeric::Vector2D& origin,
00055                 const dlr::numeric::Vector2D& semimajorAxis,
00056                 double ratio);
00057 
00058     
00064       inline
00065       Ellipse2D(const Ellipse2D& source);
00066 
00067 
00071       ~Ellipse2D() {}
00072 
00073 
00081       inline Ellipse2D&
00082       operator=(const Ellipse2D& source);
00083 
00084 
00091       const dlr::numeric::Vector2D&
00092       getOrigin() const {return m_origin;}
00093       
00094 
00108       const dlr::numeric::Vector2D&
00109       getSemimajorAxis() const {return m_semimajorAxis;}
00110       
00111 
00125       const dlr::numeric::Vector2D&
00126       getSemiminorAxis() const {return m_semimajorAxis;}
00127       
00128 
00129     private:
00130       // Private member functions.
00131 
00132       // Private data members.
00133       dlr::numeric::Vector2D m_origin;
00134       dlr::numeric::Vector2D m_semimajorAxis;
00135       dlr::numeric::Vector2D m_semiminorAxis;
00136 
00137     }; // class Ellipse2D
00138 
00139 
00140 
00141     /* ======= Non-member functions. ======= */
00142 
00143     std::ostream&
00144     operator<<(std::ostream& stream, const Ellipse2D& ellipse);
00145     
00146   } // namespace geometry
00147     
00148 } // namespace dlr
00149 
00150 
00151 /* ======= Inline and template function definitions. ======= */
00152 
00153 namespace dlr {
00154 
00155   namespace geometry {
00156 
00157     // The default constructor initializes to the unit circle.
00158     Ellipse2D::
00159     Ellipse2D()
00160       : m_origin(0.0, 0.0),
00161         m_semimajorAxis(1.0, 0.0),
00162         m_semiminorAxis(0.0, 1.0)
00163     {
00164       // Empty.
00165     }
00166 
00167     
00168     // This constructor initializes the ellipse using explicitly
00169     // specified values.
00170     Ellipse2D::
00171     Ellipse2D(const dlr::numeric::Vector2D& origin,
00172               const dlr::numeric::Vector2D& semimajorAxis,
00173               double ratio)
00174       : m_origin(origin),
00175         m_semimajorAxis(semimajorAxis),
00176         m_semiminorAxis(semimajorAxis.y() * ratio, semimajorAxis.x() * ratio)
00177     {
00178       if(ratio > 1.0) {
00179         std::swap(m_semimajorAxis, m_semiminorAxis);
00180       }
00181     }
00182 
00183     
00184     // The copy constructor deep copies its argument.
00185     Ellipse2D::
00186     Ellipse2D(const Ellipse2D& source)
00187       : m_origin(source.m_origin),
00188         m_semimajorAxis(source.m_semimajorAxis),
00189         m_semiminorAxis(source.m_semiminorAxis)
00190     {
00191       // Empty.
00192     }
00193 
00194 
00195     // The assignment operator deep copies its argument.
00196     Ellipse2D&
00197     Ellipse2D::
00198     operator=(const Ellipse2D& source)
00199     {
00200       if(&source != this) {
00201         m_origin = source.m_origin;
00202         m_semimajorAxis = source.m_semimajorAxis;
00203         m_semiminorAxis = source.m_semiminorAxis;
00204       }
00205       return *this;
00206     }
00207 
00208   } // namespace geometry
00209   
00210 } // namespace dlr
00211 
00212 
00213 #endif /* #ifndef DLR_GEOMETRY_ELLIPSE2D_H */

Generated on Wed Nov 25 11:45:25 2009 for dlrGeometry Utility Library by  doxygen 1.5.8