OpendTect  6.3
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 ________________________________________________________________________
11 
12  Converting degrees, radians and user degrees to one another.
13  Users (or rather: geologists) have North=0, and then clockwise to E=90,
14  S=180s and W=270.
15 
16 */
17 
18 #include "gendefs.h"
19 #include <math.h>
20 
21 
22 namespace Angle
23 {
24 
25 enum Type { Rad, Deg, UsrDeg };
26 // Generic conversion function see bottom: Angle::convert
27 
28 template <class T>
29 T cPI() { return (T)M_PIl; }
30 
31 template <class T>
32 inline void getFullCircle( Type typ, T& t )
33 {
34  t = typ == Rad ? 2 * cPI<T>() : 360;
35 }
36 
37 
39 template <class T>
40 inline T deg2usrdeg( T deg ) //Make sure deg is defined, otherwise, dead loop
41 {
42  T usrdeg = 90 - deg;
43  while ( usrdeg >= 360 ) usrdeg -= 360;
44  while ( usrdeg < 0 ) usrdeg += 360;
45  return usrdeg;
46 }
47 
48 
50 template <class T>
51 inline T usrdeg2deg( T udeg )
52 {
53  T deg = 90 - udeg;
54  if ( deg < 0 ) deg += 360;
55  return deg;
56 }
57 
58 
59 template <class T>
60 inline T rad2usrdeg( T rad )
61 {
62  return deg2usrdeg( Math::toDegrees(rad) );
63 }
64 
65 
66 template <class T>
67 inline T usrdeg2rad( T udeg )
68 {
69  return Math::toRadians( usrdeg2deg(udeg) );
70 }
71 
72 
73 template <class T>
74 inline T convert( Type inptyp, T val, Type outtyp )
75 {
76  if ( inptyp == outtyp || mIsUdf(val) )
77  return val;
78 
79  switch ( inptyp )
80  {
81  case Rad:
82  val = outtyp == Deg ? Math::toDegrees(val) : rad2usrdeg(val);
83  break;
84  case Deg:
85  val = outtyp == Rad ? Math::toRadians(val) : deg2usrdeg(val);
86  break;
87  case UsrDeg:
88  val = outtyp == Deg ? usrdeg2deg(val) : usrdeg2rad(val);
89  break;
90  }
91 
92  return val;
93 }
94 
95 } // namespace Angle
#define mIsUdf(val)
Use mIsUdf to check for undefinedness of simple types.
Definition: undefval.h:285
Definition: angles.h:25
T cPI()
Definition: angles.h:29
#define M_PIl
Definition: commondefs.h:69
Definition: angles.h:25
float toDegrees(float r)
Definition: math2.h:101
T usrdeg2rad(T udeg)
Definition: angles.h:67
T rad2usrdeg(T rad)
Definition: angles.h:60
Definition: angles.h:22
float toRadians(float d)
Definition: math2.h:103
T usrdeg2deg(T udeg)
User degrees are from North, clockwise.
Definition: angles.h:51
Type
Definition: angles.h:25
void getFullCircle(Type typ, T &t)
Definition: angles.h:32
T convert(Type inptyp, T val, Type outtyp)
Definition: angles.h:74
T deg2usrdeg(T deg)
User degrees are from North, clockwise.
Definition: angles.h:40
Definition: angles.h:25

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