PolarTmplDef.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 _PolarTmplDef_
00024 #define _PolarTmplDef_
00025
00026 #include <iostream>
00027 #include <sstream>
00028
00029 namespace CLAM
00030 {
00031
00032 template <class T>
00033 const PolarTmpl<T>& PolarTmpl<T>::operator += (const PolarTmpl<T>& a)
00034 {
00035 T r1,i1,r2,i2,r3,i3;
00036
00037 r1 = fabs(a.mMag) * CLAM_cos(a.mAng);
00038 i1 = fabs(a.mMag) * CLAM_sin(a.mAng);
00039 r2 = fabs(mMag) * CLAM_cos(mAng);
00040 i2 = fabs(mMag) * CLAM_sin(mAng);
00041
00042 r3 = r1+r2;
00043 i3 = i1+i2;
00044
00045 mMag = sqrt (r3*r3 + i3*i3);
00046 mAng = atan2 (i3,r3);
00047
00048 return *this;
00049 }
00050
00051
00052 template <class T>
00053 const PolarTmpl<T>& PolarTmpl<T>::operator -= (const PolarTmpl<T>& a)
00054 {
00055 T r1,i1,r2,i2,r3,i3;
00056
00057 r1 = fabs(a.mMag) * CLAM_cos(a.mAng);
00058 i1 = fabs(a.mMag) * CLAM_sin(a.mAng);
00059 r2 = fabs(mMag) * CLAM_cos(mAng);
00060 i2 = fabs(mMag) * CLAM_sin(mAng);
00061
00062 r3 = r2-r1;
00063 i3 = i2-i1;
00064
00065 mMag = CLAM_sqrt (r3*r3 + i3*i3);
00066 mAng = CLAM_atan2 (i3,r3);
00067
00068 return *this;
00069 }
00070
00071
00072 template <class T>
00073 PolarTmpl<T> PolarTmpl<T>::operator + (const PolarTmpl<T>& b) const
00074 {
00075 T r1,i1,r2,i2,r3,i3;
00076
00077 r1 = fabs(mMag) * CLAM_cos(mAng);
00078 i1 = fabs(mMag) * CLAM_sin(mAng);
00079 r2 = fabs(b.mMag) * CLAM_cos(b.mAng);
00080 i2 = fabs(b.mMag) * CLAM_sin(b.mAng);
00081
00082 r3 = r1+r2;
00083 i3 = i1+i2;
00084
00085 PolarTmpl<T> ret(CLAM_sqrt (r3*r3 + i3*i3),CLAM_atan2 (i3,r3));
00086 return ret;
00087 }
00088
00089
00090 template <class T>
00091 PolarTmpl<T> PolarTmpl<T>::operator - (const PolarTmpl<T>& b) const
00092 {
00093 T r1,i1,r2,i2,r3,i3;
00094
00095 r1 = fabs(mMag) * CLAM_cos(mAng);
00096 i1 = fabs(mMag) * CLAM_sin(mAng);
00097 r2 = fabs(b.mMag) * CLAM_cos(b.mAng);
00098 i2 = fabs(b.mMag) * CLAM_sin(b.mAng);
00099
00100 r3 = r1-r2;
00101 i3 = i1-i2;
00102
00103 PolarTmpl<T> ret(CLAM_sqrt (r3*r3 + i3*i3),CLAM_atan2 (i3,r3));
00104 return ret;
00105 }
00106
00107 template <class T>
00108 inline std::istream& operator >> (std::istream & is,
00109 PolarTmpl<T> & a)
00110 {
00111 if (is.flags() & std::ios::skipws) {
00112 char c = '\0';
00113 do
00114 is.get(c);
00115 while (is && isspace(c));
00116 if (is) is.putback(c);
00117 }
00118 char c = '\0';
00119 is >> c;
00120 if (c!='{') {
00121 if (is) is.putback(c);
00122
00123 return is;
00124 }
00125 T m;
00126 T p;
00127 if (!(is >> m)) return is;
00128 if (!(is >> p)) return is;
00129 if (is.flags() & std::ios::skipws) {
00130 char c = '\0';
00131 do
00132 is.get(c);
00133 while (is && isspace(c));
00134 if (is) is.putback(c);
00135 }
00136 if (!is.get(c) || c!='}') return is;
00137
00138 a.SetMag(m);
00139 a.SetAng(p);
00140 return is;
00141 }
00142
00143 template <class T>
00144 std::ostream& operator << (std::ostream& myStream, const PolarTmpl<T>& a)
00145 {
00146 return myStream
00147 << "{"
00148 << a.Mag()
00149 << " "
00150 << a.Ang()
00151 << "}";
00152 }
00153
00154 }
00155
00156
00157 #endif // _PolarTmplDef_
00158