12 enum Unit{uRADIANS, uDEGREES};
14 Angle() : _degrees(rUNDEF){}
15 Angle(
double angle,
bool isRadian=
false) {
17 _degrees = angle * M_RAD_BASE;
21 bool isValid()
const {
25 double degrees()
const {
29 double radians()
const {
30 return _degrees / M_RAD_BASE;
32 operator double()
const {
36 QString toString(
bool asRadians) {
37 std::stringstream txt;
39 txt << std::fixed << std::setprecision(8) << _degrees / M_RAD_BASE;
40 return QString(txt.str().c_str());
42 int dgr = (int)_degrees;
43 int minutes = (_degrees - dgr) * 60;
44 double sec = (( _degrees - dgr) - minutes/60.0) * 3600.0;
45 txt << dgr <<
" " << minutes <<
"' " << std::fixed << std::setprecision(3) << sec;
46 return QString(txt.str().c_str());
51 _degrees += a.degrees();
52 _degrees = fmod(_degrees ,360.0);
56 Angle& operator*=(
double f) {
58 _degrees = fmod(_degrees ,360.0);
59 _degrees = _degrees > 0 ? _degrees : 360.0 - _degrees;
63 Angle& operator/=(
double f) {
67 _degrees = fmod(_degrees ,360.0);
68 _degrees = _degrees > 0 ? _degrees : 360.0 - _degrees;
73 _degrees -= a.degrees();
74 _degrees = fmod(_degrees ,360.0);
75 _degrees = _degrees > 0 ? _degrees : 360.0 - _degrees;