1 // Copyright 2007 "Gilles Degottex"
3 // This file is part of "CppAddons"
5 // "CppAddons" is free software; you can redistribute it and/or modify
6 // it under the terms of the GNU Lesser General Public License as published by
7 // the Free Software Foundation; either version 2.1 of the License, or
8 // (at your option) any later version.
10 // "CppAddons" is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU Lesser General Public License for more details.
15 // You should have received a copy of the GNU Lesser General Public License
16 // along with this program; if not, write to the Free Software
17 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
30 template<typename Type>
36 polar(Type m, Type a) : mod(m), arg(a) {}
38 polar(const std::complex<Type>& c){*this=c;}
41 polar<Type>& operator = (const std::complex<Type>& c){mod = sqrt(std::norm(c)); arg = std::arg(c); return *this;}
44 //! convert cartesian coordinates to polar coordinates
45 // inline pair<double, double> cart2pol(double x, double y)
47 // double m = sqrt(x*x+y*y);
49 // if(m == 0.0) return make_pair(m, 0.0);
51 // double a = acos(x/m);
53 // if(y < 0.0) return make_pair(m, -a);
55 // return make_pair(m, a);
58 template<typename Type> std::complex<Type> make_complex(const polar<Type>& p){return std::complex<Type>(p.mod*cos(p.arg), p.mod*sin(p.arg));}