00001
00002
00003 #ifndef _GEOM_ANGLE_HPP_
00004 #define _GEOM_ANGLE_HPP_
00005
00006 #define GEN_ANGLE_FUNCTIONS \
00007 protected: \
00008 virtual double angle( const geom::Line<dimension>& line) const \
00009 { \
00010 return geom::angle(line, *this); \
00011 } \
00012 virtual double angle( const geom::HyperPlane<dimension>& plan) const \
00013 { \
00014 return geom::angle(plan, *this); \
00015 } \
00016 virtual double angle( const geom::Segment<dimension>& segment) const \
00017 { \
00018 return geom::angle( segment, *this); \
00019 } \
00020 virtual double angle( const geom::PolyLine<dimension>& polyLine) const \
00021 { \
00022 return geom::angle( polyLine, *this); \
00023 } \
00024 virtual double angle( const geom::Facet<dimension>& facet) const \
00025 { \
00026 return geom::angle( facet, *this); \
00027 } \
00028 virtual double angle( const geom::Repere<dimension>& repere) const \
00029 { \
00030 return geom::angle( repere, *this); \
00031 }
00032
00033
00034
00035 namespace jafar {
00036 namespace geom {
00037 template<int dimension>
00038 inline double angle(const Point<dimension>&, const Point<dimension>&);
00039 template<int dimension>
00040 inline double angle(const Point<dimension>&, const Line<dimension>&);
00041 template<int dimension>
00042 inline double angle(const Point<dimension>&, const HyperPlane<dimension>&);
00043 template<int dimension>
00044 inline double angle(const Line<dimension>&, const Point<dimension>&);
00045 template<int dimension>
00046 inline double angle(const Line<dimension>&, const typename Atom<dimension>::HomogenousVecD&);
00047 template<int dimension>
00048 inline double angle(const Line<dimension>&, const Line<dimension>&);
00049 template<int dimension>
00050 inline double angle(const Line<dimension>&, const HyperPlane<dimension>&);
00051 template<int dimension>
00052 inline double angle(const HyperPlane<dimension>&, const Point<dimension>&);
00053 template<int dimension>
00054 inline double angle(const HyperPlane<dimension>&, const Line<dimension>&);
00055 template<int dimension>
00056 inline double angle(const HyperPlane<dimension>&, const Repere<dimension>&);
00057 template<int dimension>
00058 inline double angle(const HyperPlane<dimension>&, const HyperPlane<dimension>&);
00059
00060 template<int dimension, typename _T2_>
00061 inline double angle(const Segment<dimension>&, const _T2_&);
00062 template<int dimension, typename _T1_>
00063 inline double angle(const _T1_&, const Segment<dimension>&);
00064 template<int dimension>
00065 inline double angle(const Segment<dimension>&, const Segment<dimension>&);
00066
00067 template<int dimension, typename _T2_>
00068 inline double angle(const PolyLine<dimension>&, const _T2_&);
00069 template<int dimension, typename _T1_>
00070 inline double angle(const _T1_&, const PolyLine<dimension>&);
00071 template<int dimension>
00072 inline double angle(const PolyLine<dimension>&, const PolyLine<dimension>&);
00073 template<int dimension>
00074 inline double angle(const PolyLine<dimension>&, const Segment<dimension>&);
00075 template<int dimension>
00076 inline double angle(const Segment<dimension>&, const PolyLine<dimension>&);
00077
00078 template<int dimension>
00079 inline double angle(const Repere<dimension>&, const Point<dimension>&);
00080 template<int dimension>
00081 inline double angle(const Repere<dimension>&, const Line<dimension>&);
00082 template<int dimension>
00083 inline double angle(const Repere<dimension>&, const HyperPlane<dimension>&);
00084 template<int dimension>
00085 inline double angle(const Repere<dimension>&, const Repere<dimension>&);
00086 template<int dimension>
00087 inline double angle(const Repere<dimension>&, const PolyLine<dimension>&);
00088 }
00089 }
00090
00091 #include "AngleImpl.hpp"
00092
00093 #endif