Mouse control
[tecorrec.git] / geo / tcGeo.h
blob594e7cfca321fb6d469c2982b576aa85b316eb25
1 /***************************************************************************
2 * This file is part of Tecorrec. *
3 * Copyright 2008 James Hogan <james@albanarts.com> *
4 * *
5 * Tecorrec is free software: you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation, either version 2 of the License, or *
8 * (at your option) any later version. *
9 * *
10 * Tecorrec is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
14 * *
15 * You should have received a copy of the GNU General Public License *
16 * along with Tecorrec. If not, write to the Free Software Foundation, *
17 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
18 ***************************************************************************/
20 #ifndef _tcGeo_h_
21 #define _tcGeo_h_
23 /**
24 * @file tcGeo.h
25 * @brief Geographical coordinates.
28 #include <Vector.h>
30 /// Use doubles for angles.
31 typedef double tcGeoAngle;
33 /// Geographical coordinates.
34 class tcGeo
36 public:
39 * Constructors + destructor
42 /// Primary constructor.
43 tcGeo()
44 : m_longitude(0.0)
45 , m_latitude(0.0)
49 /// Primary constructor.
50 tcGeo(const tcGeoAngle lon, const tcGeoAngle lat)
51 : m_longitude(lon)
52 , m_latitude(lat)
57 * Conversions
60 /// Convert to a 3d direction vector.
61 operator maths::Vector<3,double> () const
63 double z = sin(m_latitude);
64 double xy = cos(m_latitude);
65 return maths::Vector<3,double>(xy*sin(m_longitude), xy*cos(m_longitude), z);
69 * Accessors
72 /// Get the longitude.
73 tcGeoAngle lon() const
75 return m_longitude;
78 /// Get the latitude.
79 tcGeoAngle lat() const
81 return m_latitude;
85 * Mutators
88 /// Set the longitude.
89 void setLon(const tcGeoAngle lon)
91 m_longitude = lon;
94 /// Set the latitude.
95 void setLat(const tcGeoAngle lat)
97 m_latitude = lat;
100 /// Set the longitude and latitude.
101 void setLonLat(const tcGeoAngle lon, const tcGeoAngle lat)
103 m_longitude = lon;
104 m_latitude = lat;
107 private:
110 * Variables
113 /** East-West geographical coordinate.
114 * Units are radians.
116 tcGeoAngle m_longitude;
118 /** North-South geographical coordinate.
119 * Units are radians.
121 tcGeoAngle m_latitude;
125 #endif // _tcGeo_h_