All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines
Public Member Functions | Static Public Member Functions
QGpCoreTools::Angle Class Reference

#include <Angle.h>

List of all members.

Public Member Functions

 Angle ()
 Angle (double dx, double dy)
 Angle (double dx, double dy, double r)
void chSign ()
double cos () const
double cotan () const
double degrees () const
void initDegrees ()
void initRadians ()
bool isNull () const
void mirror ()
void normalize ()
void operator+= (const Angle &o)
bool operator< (const Angle &o) const
Angleoperator= (const Angle &o)
bool operator== (const Angle &o) const
double radians () const
void set (double dx, double dy)
void set (double dx, double dy, double r)
void setDegreeAzimuth (double azimuth)
void setDegrees (double degrees)
void setRadianAzimuth (double azimuth)
void setRadians (double radians)
double sin () const
double tan () const
 ~Angle ()

Static Public Member Functions

static double degreesToDM (double angle)
static double degreesToDMS (double angle)
static double degreesToRadians (double angle)
static double DMSToDegrees (double angle)
static double DMToDegrees (double angle)
static double geographicToMath (double angle)
static double mathToGeographic (double angle)
static double radiansToDegrees (double angle)

Constructor & Destructor Documentation

Init a 0 radian angle

References TRACE.

  {
    TRACE;
    _deg=0.0;
    _rad=0.0;
    _cos=1.0;
    _sin=0.0;
  }
QGpCoreTools::Angle::Angle ( double  dx,
double  dy 
) [inline]
{set(dx, dy);}
QGpCoreTools::Angle::Angle ( double  dx,
double  dy,
double  r 
) [inline]
{set(dx,dy,r);}
{}

Member Function Documentation

void QGpCoreTools::Angle::chSign ( ) [inline]

Reverse angle sign.

References TRACE.

  {
    TRACE;
    _deg=-_deg;
    _rad=-_rad;
    _sin=-_sin;
  }
double QGpCoreTools::Angle::cos ( ) const [inline]
double QGpCoreTools::Angle::cotan ( ) const [inline]
{return _cos/_sin;}
double QGpCoreTools::Angle::degrees ( ) const [inline]
double QGpCoreTools::Angle::degreesToDM ( double  angle) [static]

Converts from degrees to D.MMmm... (degrees, minutes).

  {
    double sign;
    if(angle<0.0) {
      sign=-1.0;
      angle=-angle;
    } else {
      sign=1.0;
    }
    double d=floor(angle);
    angle=(angle-d)*60.0;
    d+=0.01*angle;
    return sign*d;
  }
double QGpCoreTools::Angle::degreesToDMS ( double  angle) [static]

Converts from degrees to D.MMSSsss... (degrees, minutes, seconds).

  {
    double sign;
    if(angle<0.0) {
      sign=-1.0;
      angle=-angle;
    } else {
      sign=1.0;
    }
    double d=floor(angle);
    angle=(angle-d)*60.0;
    double m=floor(angle);
    angle=(angle-m)*60.0;
    d+=0.01*m+0.0001*angle;
    return sign*d;
  }
double QGpCoreTools::Angle::degreesToRadians ( double  angle) [inline, static]
double QGpCoreTools::Angle::DMSToDegrees ( double  angle) [static]

Converts from D.MMSSsss... (degrees, minutes, seconds) to degrees.

  {
    double sign;
    if(angle<0.0) {
      sign=-1.0;
      angle=-angle;
    } else {
      sign=1.0;
    }
    double d=floor(angle);
    angle=(angle-d)*100.0;
    double m=floor(angle);
    angle=(angle-m)*100.0;
    d+=m/60.0+angle/3600.0;
    return sign*d;
  }
double QGpCoreTools::Angle::DMToDegrees ( double  angle) [static]

Converts from D.MMSSsss... (degrees, minutes) to degrees.

  {
    double sign;
    if(angle<0.0) {
      sign=-1.0;
      angle=-angle;
    } else {
      sign=1.0;
    }
    double d=floor(angle);
    angle=(angle-d)*100.0;
    d+=angle/60.0;
    return sign*d;
  }
double QGpCoreTools::Angle::geographicToMath ( double  angle) [inline, static]

Converts a geographical azimuth in degrees (0 in north direction, clockwize) to an angle in radians in mathematical sense (0 in east direction, anti-clockwize).

See also:
mathToGeographic(double angle)

References degreesToRadians().

  {
    angle=degreesToRadians(angle);
    return angle<=0.5*M_PI ? 0.5*M_PI-angle : 2.5*M_PI-angle;
  }

From angle in radians, compute angle in degrees

References radiansToDegrees(), and TRACE.

Referenced by QGpCoreTools::Ellipse::setOrientation(), and ArrayCore::StationCouple::setStations().

  {
    TRACE;
    _deg=radiansToDegrees(_rad);
  }

From cosine and sine of angle, compute angle in radians from -pi/2 to pi/2

References TRACE.

Referenced by SciFigs::SlopeEstimator::paintData(), SciFigs::SlopeEstimator::paintText(), and ArrayCore::StationCouple::setStations().

  {
    TRACE;
    _rad=::atan2(_sin, _cos);
  }
bool QGpCoreTools::Angle::isNull ( ) const [inline]

Referenced by SciFigs::CircleViewer::paintData().

{return _rad==0.0;}
double QGpCoreTools::Angle::mathToGeographic ( double  angle) [inline, static]

Converts an angle in radians in mathematical sense (0 in east direction, anti-clockwize) to geographical azimuth in degrees (0 in north direction, clockwize).

See also:
geographicToMath(double angle)

References radiansToDegrees().

  {
    angle=radiansToDegrees(angle);
    return angle<=90.0 ? 90.0-angle : 450.0-angle;
  }
void QGpCoreTools::Angle::mirror ( ) [inline]

Rotate angle by 180 degrees

References TRACE.

Referenced by ArrayCore::StationCouple::setStations().

  {
    TRACE;
    _cos=-_cos;
    _sin=-_sin;
    if(_deg>180.0) _deg-=180; else _deg+=180.0;
    if(_rad>M_PI) _rad-=M_PI; else _rad+=M_PI;
  }

Maintains degrees and radians between 0 and 360, 0 and 2*pi, respectivelly.

Referenced by PtMotionResults::updateSignals().

  {
    while(_deg>=360.0) _deg-=360.0;
    while(_deg<0.0) _deg+=360.0;
    while(_rad>=2.0*M_PI) _rad-=2.0*M_PI;
    while(_rad<0.0) _rad+=2.0*M_PI;
  }
void QGpCoreTools::Angle::operator+= ( const Angle o)

References setRadians().

  {
    _deg+=a._deg;
    setRadians(_rad+a._rad);
  }
bool QGpCoreTools::Angle::operator< ( const Angle o) const [inline]
{return _rad<o._rad;}
Angle & QGpCoreTools::Angle::operator= ( const Angle o) [inline]

References TRACE.

  {
    TRACE;
    _deg=o._deg;
    _rad=o._rad;
    _cos=o._cos;
    _sin=o._sin;
    return *this;
  }
bool QGpCoreTools::Angle::operator== ( const Angle o) const [inline]
{return _rad==o._rad;}
double QGpCoreTools::Angle::radians ( ) const [inline]

Referenced by setRadians(), and QGpCoreTools::Ellipse::yRadius().

{return _rad;}
double QGpCoreTools::Angle::radiansToDegrees ( double  angle) [inline, static]
void QGpCoreTools::Angle::set ( double  dx,
double  dy 
) [inline]

Set cosine and sine with compution of distance (sqrt(dx*dx+dy*dy))

References QGpCoreTools::sqrt(), and TRACE.

Referenced by ArrayCore::StationCouple::setStations().

  {
    TRACE;
    _deg=0.0;
    _rad=0.0;
    double r=::sqrt(dx*dx+dy*dy);
    if(r>0.0) {
      _cos=dx/r;
      _sin=dy/r;
    } else {
      _cos=1.0;
      _sin=0.0;
    }
  }
void QGpCoreTools::Angle::set ( double  dx,
double  dy,
double  r 
) [inline]

Set cosine and sine without recompution of distance (sqrt(dx*dx+dy*dy))

References TRACE.

  {
    TRACE;
    _deg=0.0;
    _rad=0.0;
    if(r>0.0) {
      _cos=dx/r;
      _sin=dy/r;
    } else {
      _cos=1.0;
      _sin=0.0;
    }
  }
void QGpCoreTools::Angle::setDegreeAzimuth ( double  azimuth) [inline]
void QGpCoreTools::Angle::setDegrees ( double  degrees) [inline]

Can access angle in degrees, radians, sine or cosine.

References cos(), degrees(), degreesToRadians(), sin(), and TRACE.

Referenced by GeopsyCore::RotateParameters::matrix(), EllipseItem::nodes(), SciFigs::NameLineLayer::paintData(), CoordReader::setOptions(), and PtMotionResults::updateSignals().

  {
    TRACE;
    _deg=degrees;
    _rad=degreesToRadians(_deg);
    _cos=::cos(_rad);
    _sin=::sin(_rad);
  }
void QGpCoreTools::Angle::setRadianAzimuth ( double  azimuth) [inline]
void QGpCoreTools::Angle::setRadians ( double  radians) [inline]

Degrees are not set, only angle in radians, sine or cosine. To be able to call degrees(), call initDegrees() before.

References cos(), radians(), sin(), and TRACE.

Referenced by operator+=(), and QGpCoreTools::Ellipse::setOrientation().

  {
    TRACE;
    _rad=radians;
    _cos=::cos(_rad);
    _sin=::sin(_rad);
  }
double QGpCoreTools::Angle::sin ( ) const [inline]
double QGpCoreTools::Angle::tan ( ) const [inline]

Referenced by QGpCoreTools::Ellipse::xRadius(), and QGpCoreTools::Ellipse::yRadius().

{return _sin/_cos;}

The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines