Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef AngleH
00033 #define AngleH
00034
00035 #include <math.h>
00036 #include <zeusmath/System/Interfaces/IAngle.hpp>
00037 #include <zeusmath/System/Constants.h>
00038 #include <zeusbase/System/Float.h>
00039
00040
00041 BEGIN_NAMESPACE_Zeus
00042
00043
00044
00051
00052 zeusmath_class TAngle : public IAngle
00053 {
00054 public:
00056 inline TAngle() { setRadians(0); }
00057
00059 TAngle(const Float& fAngle, ESystem eSystem);
00060
00062 inline TAngle(const TAngle& rAngle) { *this = rAngle; }
00063
00065 inline TAngle(const IAngle& rAngle) { *this = rAngle; }
00066
00068 virtual inline ~TAngle() { }
00069
00070
00071 virtual inline Float MQUALIFIER getRadians() const { return m_fRadians; }
00072 virtual inline Float MQUALIFIER getDegrees() const { return radiansToDegrees(getRadians()); }
00073
00074 virtual inline void MQUALIFIER setRadians(const Float& fAngle) { m_fRadians = fAngle; }
00075 virtual inline void MQUALIFIER setDegrees(const Float& fAngle) { setRadians(degreesToRadians(fAngle)); }
00076
00077 virtual inline void MQUALIFIER assign(const IAngle& rAngle) { *this = rAngle; }
00078
00079 virtual bool MQUALIFIER isEqual(const IAngle& rAngle,
00080 bool bNormalizeToSingleCircle = false) const;
00081
00082 virtual inline Float MQUALIFIER cos() const { return TFloat(getRadians()).cos(); }
00083 virtual inline Float MQUALIFIER sin() const { return TFloat(getRadians()).sin(); }
00084 virtual inline Float MQUALIFIER tan() const { return TFloat(getRadians()).tan(); }
00085
00086 virtual void MQUALIFIER normalizeToInterval(const IAngle& rAngleMin,
00087 const IAngle& rAngleMax,
00088 bool bIncludeMin, bool bIncludeMax);
00089
00090 virtual void MQUALIFIER normalizeToSingleCircle();
00091
00093 inline const TAngle& operator=(const IAngle& rAngle) { setRadians(rAngle.getRadians()); return *this; }
00094
00096 inline const TAngle& operator=(const TAngle& rAngle) { setRadians(rAngle.getRadians()); return *this; }
00097
00098
00099 inline TAngle operator+ (const IAngle& rAngle) const { return TAngle(getRadians() + rAngle.getRadians(), etRadians); }
00100 inline TAngle operator- (const IAngle& rAngle) const { return TAngle(getRadians() - rAngle.getRadians(), etRadians); }
00101 inline const TAngle& operator+=(const IAngle& rAngle) { *this = *this + rAngle; return *this; }
00102 inline const TAngle& operator-=(const IAngle& rAngle) { *this = *this - rAngle; return *this; }
00103 inline TAngle operator* (const Float& rFloat) const { return TAngle(getRadians() * rFloat, etRadians); }
00104 inline TAngle operator/ (const Float& rFloat) const { return *this * (Float(1) / rFloat); }
00105
00106
00107 inline bool operator==(const IAngle& rAngle) const { return TFloat::equalsFloat(getRadians(), rAngle.getRadians()); }
00108 inline bool operator!=(const IAngle& rAngle) const { return !(*this == rAngle); }
00109 inline bool operator< (const IAngle& rAngle) const { return (getRadians() < rAngle.getRadians()); }
00110 inline bool operator<=(const IAngle& rAngle) const { return (getRadians() <= rAngle.getRadians()); }
00111 inline bool operator> (const IAngle& rAngle) const { return (getRadians() > rAngle.getRadians()); }
00112 inline bool operator>=(const IAngle& rAngle) const { return (getRadians() >= rAngle.getRadians()); }
00113
00114
00119
00120 static inline Float radiansToDegrees(const Float& fAngle) { return fAngle * TConstants::RadiansToDegrees; }
00121
00122
00127
00128 static inline Float degreesToRadians(const Float& fAngle) { return fAngle * TConstants::DegreesToRadians; }
00129
00130 Float getValue(ESystem eSystem) const;
00131
00132 private:
00134 Float m_fRadians;
00135 };
00136
00137
00138
00141
00142 inline TAngle operator-(const IAngle& rAngle) { return TAngle(-rAngle.getRadians(), IAngle::etRadians); }
00143
00144
00147
00148 inline TAngle operator+(const IAngle& rAngle) { return TAngle(rAngle); }
00149
00150
00151 END_NAMESPACE_Zeus
00152
00153 #endif
00154