From 5eef0e61ba484268e638d694bec08673cd52a219 Mon Sep 17 00:00:00 2001 From: curt Date: Sat, 2 May 1998 01:50:09 +0000 Subject: [PATCH] polar.[ch] renamed to polar3d.[ch] --- Math/Makefile.am | 2 +- Math/Makefile.in | 6 +-- Math/{polar.c => polar3d.c} | 78 ++++++++++--------------------------- Math/{polar.h => polar3d.h} | 32 +++++---------- 4 files changed, 34 insertions(+), 84 deletions(-) rename Math/{polar.c => polar3d.c} (51%) rename Math/{polar.h => polar3d.h} (73%) diff --git a/Math/Makefile.am b/Math/Makefile.am index 6d743e929..ee3eca0d5 100644 --- a/Math/Makefile.am +++ b/Math/Makefile.am @@ -10,7 +10,7 @@ libMath_la_SOURCES = \ fg_random.c fg_random.h \ interpolater.cxx interpolater.hxx \ mat3.h mat3defs.h mat3err.h \ - polar.c polar.h \ + polar3d.c polar3d.h \ vector.c vector.h INCLUDES += -I$(top_builddir) -I$(top_builddir)/Lib -I$(top_builddir)/Simulator diff --git a/Math/Makefile.in b/Math/Makefile.in index 28c6909e8..695f7e902 100644 --- a/Math/Makefile.in +++ b/Math/Makefile.in @@ -82,7 +82,7 @@ libMath_la_SOURCES = \ fg_random.c fg_random.h \ interpolater.cxx interpolater.hxx \ mat3.h mat3defs.h mat3err.h \ - polar.c polar.h \ + polar3d.c polar3d.h \ vector.c vector.h mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../../Include/config.h @@ -101,7 +101,7 @@ X_PRE_LIBS = @X_PRE_LIBS@ libMath_la_LDFLAGS = libMath_la_LIBADD = libMath_la_OBJECTS = MAT3geom.lo MAT3inv.lo MAT3mat.lo MAT3vec.lo \ -fg_geodesy.lo fg_random.lo interpolater.lo polar.lo vector.lo +fg_geodesy.lo fg_random.lo interpolater.lo polar3d.lo vector.lo CXXFLAGS = @CXXFLAGS@ CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CXXFLAGS) @@ -119,7 +119,7 @@ TAR = tar GZIP = --best DEP_FILES = .deps/MAT3geom.P .deps/MAT3inv.P .deps/MAT3mat.P \ .deps/MAT3vec.P .deps/fg_geodesy.P .deps/fg_random.P \ -.deps/interpolater.P .deps/polar.P .deps/vector.P +.deps/interpolater.P .deps/polar3d.P .deps/vector.P CXXMKDEP = $(CXX) -M $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CXXFLAGS) SOURCES = $(libMath_la_SOURCES) OBJECTS = $(libMath_la_OBJECTS) diff --git a/Math/polar.c b/Math/polar3d.c similarity index 51% rename from Math/polar.c rename to Math/polar3d.c index ad157643e..629cac746 100644 --- a/Math/polar.c +++ b/Math/polar3d.c @@ -27,83 +27,47 @@ #include #include -#include #include - -/* we can save these values between calls for efficiency */ -static double st, ct, sp, cp; +#include "polar3d.h" /* Convert a polar coordinate to a cartesian coordinate. Lon and Lat * must be specified in radians. The FG convention is for distances * to be specified in meters */ -struct fgCartesianPoint fgPolarToCart(double lon, double lat, double radius) { - struct fgCartesianPoint pnew; +fgCartesianPoint3d fgPolarToCart3d(fgPolarPoint3d p) { + fgCartesianPoint3d pnew; - pnew.x = cos(lon) * cos(lat) * radius; - pnew.y = sin(lon) * cos(lat) * radius; - pnew.z = sin(lat) * radius; + pnew.x = cos(p.lon) * cos(p.lat) * p.radius; + pnew.y = sin(p.lon) * cos(p.lat) * p.radius; + pnew.z = sin(p.lat) * p.radius; return(pnew); } -/* Precalculate as much as possible so we can do a batch of transforms - * through the same angles, will rotates a cartesian point about the - * center of the earth by Theta (longitude axis) and Phi (latitude - * axis) */ +/* Convert a cartesian coordinate to polar coordinates (lon/lat + * specified in radians. Distances are specified in meters. */ +fgPolarPoint3d fgCartToPolar3d(fgCartesianPoint3d cp) { + fgPolarPoint3d pp; -/* Here are the unoptimized transformation equations + pp.lon = atan2( cp.y, cp.x ); + pp.lat = FG_PI_2 - atan2( sqrt(cp.x*cp.x + cp.y*cp.y), cp.z ); + pp.radius = sqrt(cp.x*cp.x + cp.y*cp.y + cp.z*cp.z); - x' = cos(Phi) * cos(Theta) * x + cos(Phi) * sin(Theta) * y + - sin(Phi) * z - y' = -sin(Theta) * x + cos(Theta) * y - z' = -sin(Phi) * sin(Theta) * y - sin(Phi) * cos(Theta) * x + - cos(Phi) * z; - - */ -void fgRotateBatchInit(double Theta, double Phi) { - printf("Theta = %.3f, Phi = %.3f\n", Theta, Phi); - - st = sin(Theta); - ct = cos(Theta); - sp = sin(-Phi); - cp = cos(-Phi); -} - -/* Rotates a cartesian point about the center of the earth by Theta - * (longitude axis) and Phi (latitude axis) */ -struct fgCartesianPoint fgRotateCartesianPoint(struct fgCartesianPoint p) { - struct fgCartesianPoint p1, p2; - - /* printf("start = %.3f %.3f %.3f\n", p.x, p.y, p.z); */ - - /* rotate about the z axis */ - p1.x = ct * p.x - st * p.y; - p1.y = st * p.x + ct * p.y; - p1.z = p.z; - - /* printf("step 1 = %.3f %.3f %.3f\n", p1.x, p1.y, p1.z); */ - - /* rotate new point about y axis */ - p2.x = cp * p1.x + sp * p1.z; - p2.y = p1.y; - p2.z = cp * p1.z - sp * p1.x; - - /* printf("cp = %.5f, sp = %.5f\n", cp, sp); */ - /* printf("(1) = %.5f, (2) = %.5f\n", cp * p1.z, sp * p1.x); */ - - /* printf("step 2 = %.3f %.3f %.3f\n", p2.x, p2.y, p2.z); */ - - return(p2); + printf("lon = %.l2f lat = %.l2f radius = %.l2f\n", + pp.lon, pp.lat, pp.radius); + return(pp); } /* $Log$ -/* Revision 1.6 1998/04/25 22:06:23 curt -/* Edited cvs log messages in source files ... bad bad bad! +/* Revision 1.1 1998/05/02 01:50:11 curt +/* polar.[ch] renamed to polar3d.[ch] /* + * Revision 1.6 1998/04/25 22:06:23 curt + * Edited cvs log messages in source files ... bad bad bad! + * * Revision 1.5 1998/01/27 00:48:00 curt * Incorporated Paul Bleisch's new debug message * system and commandline/config file processing code. diff --git a/Math/polar.h b/Math/polar3d.h similarity index 73% rename from Math/polar.h rename to Math/polar3d.h index bf3b15141..806f27e56 100644 --- a/Math/polar.h +++ b/Math/polar3d.h @@ -39,29 +39,12 @@ extern "C" { /* Convert a polar coordinate to a cartesian coordinate. Lon and Lat * must be specified in radians. The FG convention is for distances * to be specified in meters */ -struct fgCartesianPoint fgPolarToCart(double lon, double lat, double radius); +fgCartesianPoint3d fgPolarToCart3d(fgPolarPoint3d p); -/* Precalculate as much as possible so we can do a batch of transforms - * through the same angles, will rotates a cartesian point about the - * center of the earth by Theta (longitude axis) and Phi (latitude - * axis) */ - -/* Here are the unoptimized transformation equations - - x' = cos(Phi) * cos(Theta) * x + cos(Phi) * sin(Theta) * y + - sin(Phi) * z - y' = -sin(Theta) * x + cos(Theta) * y - z' = -sin(Phi) * sin(Theta) * y - sin(Phi) * cos(Theta) * x + - cos(Phi) * z; - - */ -void fgRotateBatchInit(double Theta, double Phi); - - -/* Rotates a cartesian point about the center of the earth by Theta - * (longitude axis) and Phi (latitude axis) */ -struct fgCartesianPoint fgRotateCartesianPoint(struct fgCartesianPoint p); +/* Convert a cartesian coordinate to polar coordinates (lon/lat + * specified in radians. Distances are specified in meters. */ +fgPolarPoint3d fgCartToPolar3d(fgCartesianPoint3d cp); #ifdef __cplusplus @@ -73,9 +56,12 @@ struct fgCartesianPoint fgRotateCartesianPoint(struct fgCartesianPoint p); /* $Log$ -/* Revision 1.9 1998/04/25 22:06:23 curt -/* Edited cvs log messages in source files ... bad bad bad! +/* Revision 1.1 1998/05/02 01:50:11 curt +/* polar.[ch] renamed to polar3d.[ch] /* + * Revision 1.9 1998/04/25 22:06:23 curt + * Edited cvs log messages in source files ... bad bad bad! + * * Revision 1.8 1998/04/21 17:03:50 curt * Prepairing for C++ integration. *