Statistics
| Branch: | Tag: | Revision:

root / ezdop / src / host / hunter / src / spherical.cc @ 676acd5c

History | View | Annotate | Download (2.1 kB)

1 676acd5c jcorgan
/*
2 676acd5c jcorgan
 Copyright 2006 Johnathan Corgan.
3 676acd5c jcorgan
 
4 676acd5c jcorgan
 This program is free software; you can redistribute it and/or modify
5 676acd5c jcorgan
 it under the terms of the GNU General Public License version 2
6 676acd5c jcorgan
 as published by the Free Software Foundation.
7 676acd5c jcorgan
 
8 676acd5c jcorgan
 This software is distributed in the hope that it will be useful,
9 676acd5c jcorgan
 but WITHOUT ANY WARRANTY; without even the implied warranty of
10 676acd5c jcorgan
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 676acd5c jcorgan
 GNU General Public License for more details.
12 676acd5c jcorgan
 
13 676acd5c jcorgan
 You should have received a copy of the GNU General Public License
14 676acd5c jcorgan
 along with GNU Radio; see the file COPYING.  If not, write to
15 676acd5c jcorgan
 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
16 676acd5c jcorgan
 Boston, MA 02111-1307, USA.
17 676acd5c jcorgan
*/
18 676acd5c jcorgan
19 676acd5c jcorgan
// Application level includes
20 676acd5c jcorgan
#include "spherical.h"
21 676acd5c jcorgan
#include "util.h"
22 676acd5c jcorgan
23 676acd5c jcorgan
Spherical::Spherical()
24 676acd5c jcorgan
{
25 676acd5c jcorgan
    m_latitude = 0.0;
26 676acd5c jcorgan
    m_longitude = 0.0;
27 676acd5c jcorgan
}
28 676acd5c jcorgan
29 676acd5c jcorgan
Spherical::Spherical(double latitude, double longitude)
30 676acd5c jcorgan
{
31 676acd5c jcorgan
    m_latitude = latitude;
32 676acd5c jcorgan
    m_longitude = longitude;
33 676acd5c jcorgan
}
34 676acd5c jcorgan
35 676acd5c jcorgan
Spherical::Spherical(wxString latitude, wxString longitude)
36 676acd5c jcorgan
{
37 676acd5c jcorgan
    latitude.ToDouble(&m_latitude);
38 676acd5c jcorgan
    longitude.ToDouble(&m_longitude);
39 676acd5c jcorgan
}
40 676acd5c jcorgan
41 676acd5c jcorgan
void Spherical::SetLatitude(double latitude)
42 676acd5c jcorgan
{
43 676acd5c jcorgan
    m_latitude = latitude;  // TODO: error handle
44 676acd5c jcorgan
}
45 676acd5c jcorgan
46 676acd5c jcorgan
void Spherical::SetLongitude(double longitude)
47 676acd5c jcorgan
{
48 676acd5c jcorgan
    m_longitude = longitude;
49 676acd5c jcorgan
}
50 676acd5c jcorgan
51 676acd5c jcorgan
double range(const Spherical &from, const Spherical &to)
52 676acd5c jcorgan
{
53 676acd5c jcorgan
    double lat1 = to_radians(from.m_latitude);
54 676acd5c jcorgan
    double lon1 = to_radians(from.m_longitude);
55 676acd5c jcorgan
56 676acd5c jcorgan
    double lat2 = to_radians(to.m_latitude);
57 676acd5c jcorgan
    double lon2 = to_radians(to.m_longitude);
58 676acd5c jcorgan
    
59 676acd5c jcorgan
    double n1 = sin((lat1-lat2)/2);
60 676acd5c jcorgan
    double n2 = sin((lon1-lon2)/2);   
61 676acd5c jcorgan
    double distance = 2*asin(sqrt(n1*n1 + cos(lat1)*cos(lat2)*n2*n2));
62 676acd5c jcorgan
63 676acd5c jcorgan
    return to_degrees(distance)*60.0*1.15077945; // Conversion to statute miles
64 676acd5c jcorgan
65 676acd5c jcorgan
}
66 676acd5c jcorgan
67 676acd5c jcorgan
double bearing(const Spherical &from, const Spherical &to)
68 676acd5c jcorgan
{
69 676acd5c jcorgan
    double lat1 = to_radians(from.m_latitude);
70 676acd5c jcorgan
    double lon1 = to_radians(from.m_longitude);
71 676acd5c jcorgan
    double lat2 = to_radians(to.m_latitude);
72 676acd5c jcorgan
    double lon2 = to_radians(to.m_longitude);
73 676acd5c jcorgan
74 676acd5c jcorgan
    double bearing = atan2(-sin(lon1-lon2)*cos(lat2), cos(lat1)*sin(lat2)-sin(lat1)*cos(lat2)*cos(lon1-lon2));
75 676acd5c jcorgan
    return degree_normalize(to_degrees(bearing));
76 676acd5c jcorgan
}