ray2D.cpp

Go to the documentation of this file.
00001 
00015 #include <dlrGeometry/ray2D.h>
00016 #include <dlrNumeric/utilities.h>
00017 
00018 namespace dnum = dlr::numeric;
00019 
00020 namespace dlr {
00021 
00022   namespace geometry {
00023     
00024     // This constructor initializes the ray using a point and a
00025     // direction vector.
00026     Ray2D::
00027     Ray2D(const Vector2D& point,
00028           const Vector2D& direction,
00029           bool normalize)
00030       : m_origin(point),
00031         m_direction(direction)
00032     {
00033       if(normalize) {
00034         m_direction /= dnum::magnitude(m_direction);
00035       }
00036     }
00037 
00038     
00039     // This constructor initializes the ray according to the
00040     // equation Ax + By + C = 0.
00041     Ray2D::
00042     Ray2D(double aa, double bb, double cc)
00043       : m_origin(-(aa * cc), -(bb * cc)),
00044         m_direction(-bb, aa)
00045     {
00046       double kk = aa * aa + bb * bb;
00047       m_origin /= kk;
00048       m_direction /= dnum::magnitude(m_direction);
00049     }
00050 
00051          
00052     // The copy constructor deep copies its argument.
00053     Ray2D::
00054     Ray2D(const Ray2D& source)
00055       : m_origin(source.m_origin),
00056         m_direction(source.m_direction)
00057     {
00058       // Empty.
00059     }
00060 
00061 
00062     // The assignment operator deep copies its argument.
00063     Ray2D&
00064     Ray2D::
00065     operator=(const Ray2D& source)
00066     {
00067       if(&source != this) {
00068         m_origin = source.m_origin;
00069         m_direction = source.m_direction;
00070       }
00071       return *this;
00072     }
00073 
00074 
00075     /* ======= Non-member functions. ======= */
00076 
00077     std::ostream&
00078     operator<<(std::ostream& stream, const Ray2D& ray)
00079     {
00080       stream << "Ray2D { "
00081              << ray.getOrigin() << ", "
00082              << ray.getDirectionVector() << " }";
00083       return stream;
00084     }
00085     
00086   } // namespace geometry
00087     
00088 } // namespace dlr

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