1
0
Fork 0

polar.[ch] renamed to polar3d.[ch]

This commit is contained in:
curt 1998-05-02 01:50:09 +00:00
parent 021558d6dd
commit 5eef0e61ba
4 changed files with 34 additions and 84 deletions

View file

@ -10,7 +10,7 @@ libMath_la_SOURCES = \
fg_random.c fg_random.h \ fg_random.c fg_random.h \
interpolater.cxx interpolater.hxx \ interpolater.cxx interpolater.hxx \
mat3.h mat3defs.h mat3err.h \ mat3.h mat3defs.h mat3err.h \
polar.c polar.h \ polar3d.c polar3d.h \
vector.c vector.h vector.c vector.h
INCLUDES += -I$(top_builddir) -I$(top_builddir)/Lib -I$(top_builddir)/Simulator INCLUDES += -I$(top_builddir) -I$(top_builddir)/Lib -I$(top_builddir)/Simulator

View file

@ -82,7 +82,7 @@ libMath_la_SOURCES = \
fg_random.c fg_random.h \ fg_random.c fg_random.h \
interpolater.cxx interpolater.hxx \ interpolater.cxx interpolater.hxx \
mat3.h mat3defs.h mat3err.h \ mat3.h mat3defs.h mat3err.h \
polar.c polar.h \ polar3d.c polar3d.h \
vector.c vector.h vector.c vector.h
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = ../../Include/config.h CONFIG_HEADER = ../../Include/config.h
@ -101,7 +101,7 @@ X_PRE_LIBS = @X_PRE_LIBS@
libMath_la_LDFLAGS = libMath_la_LDFLAGS =
libMath_la_LIBADD = libMath_la_LIBADD =
libMath_la_OBJECTS = MAT3geom.lo MAT3inv.lo MAT3mat.lo MAT3vec.lo \ 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@ CXXFLAGS = @CXXFLAGS@
CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CXXFLAGS) CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CXXFLAGS)
LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CXXFLAGS)
@ -119,7 +119,7 @@ TAR = tar
GZIP = --best GZIP = --best
DEP_FILES = .deps/MAT3geom.P .deps/MAT3inv.P .deps/MAT3mat.P \ DEP_FILES = .deps/MAT3geom.P .deps/MAT3inv.P .deps/MAT3mat.P \
.deps/MAT3vec.P .deps/fg_geodesy.P .deps/fg_random.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) CXXMKDEP = $(CXX) -M $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CXXFLAGS)
SOURCES = $(libMath_la_SOURCES) SOURCES = $(libMath_la_SOURCES)
OBJECTS = $(libMath_la_OBJECTS) OBJECTS = $(libMath_la_OBJECTS)

View file

@ -27,83 +27,47 @@
#include <math.h> #include <math.h>
#include <stdio.h> #include <stdio.h>
#include <Math/polar.h>
#include <Include/fg_constants.h> #include <Include/fg_constants.h>
#include "polar3d.h"
/* we can save these values between calls for efficiency */
static double st, ct, sp, cp;
/* Convert a polar coordinate to a cartesian coordinate. Lon and Lat /* Convert a polar coordinate to a cartesian coordinate. Lon and Lat
* must be specified in radians. The FG convention is for distances * must be specified in radians. The FG convention is for distances
* to be specified in meters */ * to be specified in meters */
struct fgCartesianPoint fgPolarToCart(double lon, double lat, double radius) { fgCartesianPoint3d fgPolarToCart3d(fgPolarPoint3d p) {
struct fgCartesianPoint pnew; fgCartesianPoint3d pnew;
pnew.x = cos(lon) * cos(lat) * radius; pnew.x = cos(p.lon) * cos(p.lat) * p.radius;
pnew.y = sin(lon) * cos(lat) * radius; pnew.y = sin(p.lon) * cos(p.lat) * p.radius;
pnew.z = sin(lat) * radius; pnew.z = sin(p.lat) * p.radius;
return(pnew); return(pnew);
} }
/* Precalculate as much as possible so we can do a batch of transforms /* Convert a cartesian coordinate to polar coordinates (lon/lat
* through the same angles, will rotates a cartesian point about the * specified in radians. Distances are specified in meters. */
* center of the earth by Theta (longitude axis) and Phi (latitude fgPolarPoint3d fgCartToPolar3d(fgCartesianPoint3d cp) {
* axis) */ 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 + printf("lon = %.l2f lat = %.l2f radius = %.l2f\n",
sin(Phi) * z pp.lon, pp.lat, pp.radius);
y' = -sin(Theta) * x + cos(Theta) * y return(pp);
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);
} }
/* $Log$ /* $Log$
/* Revision 1.6 1998/04/25 22:06:23 curt /* Revision 1.1 1998/05/02 01:50:11 curt
/* Edited cvs log messages in source files ... bad bad bad! /* 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 * Revision 1.5 1998/01/27 00:48:00 curt
* Incorporated Paul Bleisch's <pbleisch@acm.org> new debug message * Incorporated Paul Bleisch's <pbleisch@acm.org> new debug message
* system and commandline/config file processing code. * system and commandline/config file processing code.

View file

@ -39,29 +39,12 @@ extern "C" {
/* Convert a polar coordinate to a cartesian coordinate. Lon and Lat /* Convert a polar coordinate to a cartesian coordinate. Lon and Lat
* must be specified in radians. The FG convention is for distances * must be specified in radians. The FG convention is for distances
* to be specified in meters */ * 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 /* Convert a cartesian coordinate to polar coordinates (lon/lat
* through the same angles, will rotates a cartesian point about the * specified in radians. Distances are specified in meters. */
* center of the earth by Theta (longitude axis) and Phi (latitude fgPolarPoint3d fgCartToPolar3d(fgCartesianPoint3d cp);
* 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);
#ifdef __cplusplus #ifdef __cplusplus
@ -73,9 +56,12 @@ struct fgCartesianPoint fgRotateCartesianPoint(struct fgCartesianPoint p);
/* $Log$ /* $Log$
/* Revision 1.9 1998/04/25 22:06:23 curt /* Revision 1.1 1998/05/02 01:50:11 curt
/* Edited cvs log messages in source files ... bad bad bad! /* 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 * Revision 1.8 1998/04/21 17:03:50 curt
* Prepairing for C++ integration. * Prepairing for C++ integration.
* *