Polar.hxx
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 #ifndef CLAM_Polar_hxx
00024 #define CLAM_Polar_hxx
00025
00026 #include <iosfwd>
00027 #include "CLAM_Math.hxx"
00028 #include "TypeInfo.hxx"
00029
00030 namespace CLAM
00031 {
00032
00033 class Polar
00034 {
00035 typedef TData T;
00036 private:
00037 T mMag, mAng;
00038
00039 public:
00040 Polar(T mag = 0.0,T ang = 0.0)
00041 {
00042 mMag = mag;
00043 mAng = ang;
00044 };
00045
00046 const T Mag(void) const {return mMag;};
00047 const T Ang(void) const {return mAng;};
00048
00049 void SetMag(const T& mag) { mMag = mag;};
00050 void SetAng(const T& ang) { mAng = ang;};
00051
00052
00053 const T Real (void) const
00054 {
00055 return fabs(mMag) * CLAM_cos(mAng);
00056 }
00057
00058
00059 const T Imag (void) const
00060 {
00061 return fabs(mMag) * CLAM_sin(mAng);
00062 }
00063
00064
00065 friend Polar ToComplex(const T& real, const T& imag)
00066 {
00067 return Polar (CLAM_sqrt (real*real + imag*imag),CLAM_atan2 (imag,real));
00068 };
00069
00070
00071
00072 const Polar& operator = (const float mag)
00073 {
00074 mMag = mag;
00075 mAng = 0;
00076 return *this;
00077 }
00078
00079
00080 const Polar& operator = (const Polar& a)
00081 {
00082 mMag = a.mMag;
00083 mAng = a.mAng;
00084 return *this;
00085
00086 }
00087
00088
00089 const Polar& operator += (const Polar& a);
00090
00091
00092 const Polar& operator -= (const Polar& a);
00093
00094
00095 Polar operator - (const Polar& b) const;
00096
00097
00098 Polar operator + (const Polar& b) const;
00099
00100
00101 Polar operator * (const Polar& b) const
00102 {
00103 Polar ret(mMag * b.mMag,mAng + b.mAng);
00104 return ret;
00105 }
00106
00107
00108 Polar operator / (const Polar& b) const
00109 {
00110 Polar ret(mMag / b.mMag,mAng - b.mAng);
00111 return ret;
00112 }
00113
00114
00115 bool operator == (const Polar& b) const
00116 {
00117 if ((mMag == b.mMag)&&(mAng == b.mAng)) return true;
00118 else return false;
00119 }
00120
00121
00122 bool operator != (const Polar& b) const
00123 {
00124 if ((mMag == b.mMag)&&(mAng == b.mAng)) return false;
00125 else return true;
00126 }
00127
00128 };
00129
00130 std::istream& operator >> (std::istream & stream, Polar & a);
00131 std::ostream& operator << (std::ostream & stream, const Polar & a);
00132
00133 CLAM_TYPEINFOGROUP(BasicCTypeInfo, Polar);
00134
00135 }
00136
00137 #endif // CLAM_Polar_hxx
00138