Added a test-up program to test the concept of "up".
This commit is contained in:
parent
a4d27fe7bc
commit
d48a506721
2 changed files with 53 additions and 1 deletions
|
@ -1,4 +1,4 @@
|
||||||
bin_PROGRAMS = est-epsilon gl-info test-mktime
|
bin_PROGRAMS = est-epsilon gl-info test-mktime test-up
|
||||||
|
|
||||||
est_epsilon_SOURCES = est-epsilon.c
|
est_epsilon_SOURCES = est-epsilon.c
|
||||||
est_epsilon_LDADD = $(base_LIBS)
|
est_epsilon_LDADD = $(base_LIBS)
|
||||||
|
@ -8,3 +8,6 @@ gl_info_LDADD = $(opengl_LIBS)
|
||||||
|
|
||||||
test_mktime_SOURCES = test-mktime.cxx
|
test_mktime_SOURCES = test-mktime.cxx
|
||||||
test_mktime_LDADD = $(base_LIBS)
|
test_mktime_LDADD = $(base_LIBS)
|
||||||
|
|
||||||
|
test_up_SOURCES = test-up.cxx
|
||||||
|
test_up_LDADD = -lsgmath -lsgdebug -lplibsg $(base_LIBS)
|
||||||
|
|
49
tests/test-up.cxx
Normal file
49
tests/test-up.cxx
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
// do some test relating to the concept of "up"
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
#include <plib/sg.h>
|
||||||
|
|
||||||
|
#include <simgear/constants.h>
|
||||||
|
#include <simgear/math/sg_geodesy.hxx>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
// for each lat/lon given in goedetic coordinates, calculate
|
||||||
|
// geocentric coordinates, cartesian coordinates, the local "up"
|
||||||
|
// vector (based on original geodetic lat/lon), as well as the "Z"
|
||||||
|
// intercept (for which 0 = center of earth)
|
||||||
|
|
||||||
|
|
||||||
|
double lon = 0;
|
||||||
|
double alt = 0;
|
||||||
|
|
||||||
|
for ( double lat = 0; lat <= 90; lat += 5.0 ) {
|
||||||
|
cout << "lon = " << lon << " geod lat = " << lat;
|
||||||
|
|
||||||
|
double sl_radius, lat_geoc;
|
||||||
|
sgGeodToGeoc( lat * DEG_TO_RAD, alt, &sl_radius, &lat_geoc );
|
||||||
|
cout << " geoc lat = " << lat_geoc * RAD_TO_DEG << endl;
|
||||||
|
|
||||||
|
Point3D pgd( lon * DEG_TO_RAD, lat * DEG_TO_RAD, 0.0 );
|
||||||
|
Point3D pc = sgGeodToCart( pgd );
|
||||||
|
cout << " cartesian = " << pc << endl;
|
||||||
|
|
||||||
|
sgMat4 UP;
|
||||||
|
sgVec3 geod_up;
|
||||||
|
sgMakeRotMat4( UP, lon, 0.0, -lat );
|
||||||
|
sgSetVec3( geod_up, UP[0][0], UP[0][1], UP[0][2] );
|
||||||
|
cout << " geod up = " << geod_up[0] << ", " << geod_up[1] << ", "
|
||||||
|
<< geod_up[2] << endl;
|
||||||
|
|
||||||
|
double slope = geod_up[2] / geod_up[0];
|
||||||
|
double intercept = pc.z() - slope * pc.x();
|
||||||
|
cout << " Z intercept (based on geodetic up) = " << intercept << endl;
|
||||||
|
|
||||||
|
slope = pc.z() / pc.x();
|
||||||
|
intercept = pc.z() - slope * pc.x();
|
||||||
|
cout << " Z intercept (based on geocentric up) = " << intercept << endl;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in a new issue