#pragma once // // FILE: Angle.h // AUTHOR: Rob Tillaart // VERSION: 0.1.12 // PURPOSE: angle library for Arduino // HISTORY: See angle.cpp // // AngleFormat proxy added 03/03/15 by Christoper Andrews. // #include "math.h" #include "Arduino.h" #include "Printable.h" #define ANGLE_LIB_VERSION (F("0.1.12")) class Angle; enum AngleFormatMode{ D = 1, M, S, T }; struct AngleFormat : Printable{ AngleFormat( const Angle &ref, AngleFormatMode format ); size_t printTo(Print& p) const; const Angle ∠ AngleFormatMode mode; }; class Angle: public Printable { public: Angle(int dd = 0, int mm = 0, int ss = 0, int tt = 0); Angle(double alpha); Angle(const char * str); int sign() { return neg ? -1 : 1; }; int degree() { return d; }; int minute() { return m; }; int second() { return s; }; int tenthousand() { return t; }; size_t printTo(Print& p) const { return printTo( p, T ); } size_t printTo(Print& p, AngleFormatMode mode) const; AngleFormat format( AngleFormatMode format ) { return AngleFormat( *this, format ); } double toDouble(); double toRadians() { return toDouble() * PI / 180.0; }; void fromRadians(double rad) { *this = rad * 180.0/PI; }; // EQUALITIES bool operator == (const Angle& a) { return compare(*this, a) == 0; }; bool operator != (const Angle& a) { return compare(*this, a) != 0; }; bool operator < (const Angle& a) { return compare(*this, a) < 0; }; bool operator <= (const Angle& a) { return compare(*this, a) <= 0; }; bool operator > (const Angle& a) { return compare(*this, a) > 0; }; bool operator >= (const Angle& a) { return compare(*this, a) >= 0; }; // NEGATE Angle operator - (); Angle operator + (const Angle&); Angle& operator += (const Angle&); Angle operator - (const Angle&); Angle& operator -= (const Angle&); Angle operator * (const double); Angle& operator *= (const double); Angle operator / (const double); Angle& operator /= (const double); double operator / (Angle&); // ratio private: void normalize(); int compare(const Angle&, const Angle&); Angle addHelper(const Angle &a); Angle subHelper(const Angle &a); bool neg; // angle is negative int d; // whole degrees int m; // minutes int s; // seconds int t; // ten thousands }; // -- END OF FILE