]> git.mxchange.org Git - flightgear.git/blob - tests/test-up.cxx
Added a test-up program to test the concept of "up".
[flightgear.git] / tests / test-up.cxx
1 // do some test relating to the concept of "up"
2
3 #include <iostream>
4
5 #include <plib/sg.h>
6
7 #include <simgear/constants.h>
8 #include <simgear/math/sg_geodesy.hxx>
9
10 int main() {
11     // for each lat/lon given in goedetic coordinates, calculate
12     // geocentric coordinates, cartesian coordinates, the local "up"
13     // vector (based on original geodetic lat/lon), as well as the "Z"
14     // intercept (for which 0 = center of earth)
15
16
17     double lon = 0;
18     double alt = 0;
19
20     for ( double lat = 0; lat <= 90; lat += 5.0 ) {
21         cout << "lon = " << lon << "  geod lat = " << lat;
22
23         double sl_radius, lat_geoc;
24         sgGeodToGeoc( lat * DEG_TO_RAD, alt, &sl_radius, &lat_geoc );
25         cout << "  geoc lat = " << lat_geoc * RAD_TO_DEG << endl;
26
27         Point3D pgd( lon * DEG_TO_RAD, lat * DEG_TO_RAD, 0.0 );
28         Point3D pc = sgGeodToCart( pgd );
29         cout << "  cartesian = " << pc << endl;
30
31         sgMat4 UP;
32         sgVec3 geod_up;
33         sgMakeRotMat4( UP, lon, 0.0, -lat );
34         sgSetVec3( geod_up, UP[0][0], UP[0][1], UP[0][2] );
35         cout << "  geod up = " << geod_up[0] << ", " << geod_up[1] << ", "
36              << geod_up[2] << endl;
37
38         double slope = geod_up[2] / geod_up[0];
39         double intercept = pc.z() - slope * pc.x();
40         cout << "  Z intercept (based on geodetic up) = " << intercept << endl;
41
42         slope = pc.z() / pc.x();
43         intercept = pc.z() - slope * pc.x();
44         cout << "  Z intercept (based on geocentric up) = " << intercept << endl;
45
46    }
47
48     return 0;
49 }