polar.[ch] renamed to polar3d.[ch]
This commit is contained in:
parent
021558d6dd
commit
5eef0e61ba
4 changed files with 34 additions and 84 deletions
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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.
|
|
@ -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.
|
||||||
*
|
*
|
Loading…
Reference in a new issue