OpendTect  6.6
angles.h
Go to the documentation of this file.
1 #pragma once
2 
3 /*
4 ________________________________________________________________________
5 
6  (C) dGB Beheer B.V.; (LICENSE) http://opendtect.org/OpendTect_license.txt
7  Author: Bert
8  Date: Mar 2009
9  Contents: Angle functions
10  RCS: $Id$
11 ________________________________________________________________________
12 
13  Converting degrees, radians and user degrees to one another.
14  Users (or rather: geologists) have North=0, and then clockwise to E=90,
15  S=180s and W=270.
16 
17 */
18 
19 #include "gendefs.h"
20 #include <math.h>
21 
22 
23 namespace Angle
24 {
25 
26 enum Type { Rad, Deg, UsrDeg };
27 // Generic conversion function see bottom: Angle::convert
28 
29 template <class T>
30 T cPI() { return (T)M_PIl; }
31 
32 template <class T>
33 inline void getFullCircle( Type typ, T& t )
34 {
35  t = typ == Rad ? 2 * cPI<T>() : 360;
36 }
37 
38 
40 template <class T>
41 inline T deg2usrdeg( T deg ) //Make sure deg is defined, otherwise, dead loop
42 {
43  T usrdeg = 90 - deg;
44  while ( usrdeg >= 360 ) usrdeg -= 360;
45  while ( usrdeg < 0 ) usrdeg += 360;
46  return usrdeg;
47 }
48 
49 
51 template <class T>
52 inline T usrdeg2deg( T udeg )
53 {
54  T deg = 90 - udeg;
55  if ( deg < 0 ) deg += 360;
56  return deg;
57 }
58 
59 
60 template <class T>
61 inline T rad2usrdeg( T rad )
62 {
63  return deg2usrdeg( Math::toDegrees(rad) );
64 }
65 
66 
67 template <class T>
68 inline T usrdeg2rad( T udeg )
69 {
70  return Math::toRadians( usrdeg2deg(udeg) );
71 }
72 
73 
74 template <class T>
75 inline T convert( Type inptyp, T val, Type outtyp )
76 {
77  if ( inptyp == outtyp || mIsUdf(val) )
78  return val;
79 
80  switch ( inptyp )
81  {
82  case Rad:
83  val = outtyp == Deg ? Math::toDegrees(val) : rad2usrdeg(val);
84  break;
85  case Deg:
86  val = outtyp == Rad ? Math::toRadians(val) : deg2usrdeg(val);
87  break;
88  case UsrDeg:
89  val = outtyp == Deg ? usrdeg2deg(val) : usrdeg2rad(val);
90  break;
91  }
92 
93  return val;
94 }
95 
96 } // namespace Angle
97 
Angle::usrdeg2rad
T usrdeg2rad(T udeg)
Definition: angles.h:68
Angle::rad2usrdeg
T rad2usrdeg(T rad)
Definition: angles.h:61
mIsUdf
#define mIsUdf(val)
Use mIsUdf to check for undefinedness of simple types.
Definition: undefval.h:289
Angle::UsrDeg
@ UsrDeg
Definition: angles.h:26
Angle::Type
Type
Definition: angles.h:26
Angle::Rad
@ Rad
Definition: angles.h:26
Angle::getFullCircle
void getFullCircle(Type typ, T &t)
Definition: angles.h:33
Angle
Definition: angles.h:24
M_PIl
#define M_PIl
Definition: commondefs.h:80
gendefs.h
Angle::cPI
T cPI()
Definition: angles.h:30
Angle::deg2usrdeg
T deg2usrdeg(T deg)
User degrees are from North, clockwise.
Definition: angles.h:41
Angle::usrdeg2deg
T usrdeg2deg(T udeg)
User degrees are from North, clockwise.
Definition: angles.h:52
Angle::Deg
@ Deg
Definition: angles.h:26
Math::toRadians
float toRadians(float d)
Definition: math2.h:98
Angle::convert
T convert(Type inptyp, T val, Type outtyp)
Definition: angles.h:75
Math::toDegrees
float toDegrees(float r)
Definition: math2.h:96

Generated at for the OpendTect seismic interpretation project. Copyright (C): dGB Beheer B.V. 1995-2021