1
0
Fork 0

Initial revision.

This commit is contained in:
curt 1999-02-14 19:07:13 +00:00
parent 1ca1299197
commit 2964dc73ee
6 changed files with 404 additions and 0 deletions

View file

@ -0,0 +1,246 @@
%
% `coord.tex' -- describes the coordinate systems and transforms used
% by the FG scenery management subsystem
%
% Written by Curtis Olson. Started July, 1997.
%
% $Id$
\documentclass[12pt]{article}
% \usepackage{times}
% \usepackage{mathptm}
\usepackage{anysize}
\papersize{11in}{8.5in}
\marginsize{1in}{1in}{1in}{1in}
\usepackage{epsfig}
\usepackage{setspace}
\onehalfspacing
\usepackage{url}
\begin{document}
\title{
Flight Gear Internal Scenery Coordinate Systems and
Representations.
}
\author{
Curtis L. Olson\\
(\texttt{curt@me.umn.edu})
}
\maketitle
\section{Coordinate Systems}
\subsection{Geocentric Coordinates}
Geocentric coordinates are the polar coordinates centered at the
center of the earth. Points are defined by the geocentric longitude,
geocentric latitude, and distance from the \textit{center} of the
earth. Note, due to the non-spherical nature of the earth, the
geocentric latitude is not exactly the same as the traditional
latitude you would see on a map.
\subsection{Geodetic Coordinates}
Geodetic coordinates are represented by longitude, latitude, and
elevation above sea level. These are the coordinates you would read
off a map, or see on your GPS. However, the geodetic latitude does
not precisely correspond to the angle (in polar coordinates) from the
center of the earth which the geocentric coordinate system reports.
\subsection{Geocentric vs. Geodetic coordinates}
The difference between geodetic and geocentric coordinates is subtle
and must be understood. The problem arose because people started
mapping the earth using latitude and longitude back when they thought
the Earth was round (or a perfect sphere.) It's not though. It is
more of an ellipse.
Early map makers defined the standard \textit{geodetic} latitude as
the angle between the local up vector and the equator. This is shown
in figure \ref{fig:geodesy}. The point $\mathbf{B}$ marks our current
position. The line $\mathbf{ABC}$ is tangent to the ellipse at point
$\mathbf{B}$ and represents the local ``horizontal.'' The line
$\mathbf{BF}$ represents the local ``up'' vector. Thus, in
traditional map maker terms, the current latitude is the angle defined
by $\angle \mathbf{DBF}$.
However, as you can see from the figure, the line $\mathbf{BF}$ does
not extend through the center of the earth. Instead, the line
$\mathbf{BE}$ extends through the center of the earth. So in
\textit{geocentric} coordinates, our latitude would be reported as the
angle $\angle \mathbf{DBE}$.
\begin{figure}[hbt]
\centerline{
\psfig{file=geodesy.eps}
}
\caption{Geocentric vs. Geodetic coordinates}
\label{fig:geodesy}
\end{figure}
The LaRCsim flight model operates in geocentric coordinates
internally, but reports the current position in both coordinate
systems.
\subsection{World Geodetic System 1984 (WGS 84)}
The world is not a perfect sphere. WGS-84 defines a standard model
for dealing with this. The LaRCsim flight model code already uses the
WGS-84 standard in its calculations.
For those that are interested here are a couple of URLS for more
information:
\noindent
\url{http://acro.harvard.edu/SSA/BGA/wg84figs.html} \\
\url{http://www.afmc.wpafb.af.mil/organizations/HQ-AFMC/IN/mist/dma/wgs1984.htm}
\\
\url{http://www.nima.mil/publications/guides/dtf/datums.html}
To maintain simulation accuracy, the WGS-84 model should be used when
translating geodetic coordinates (via geocentric coordinates) into the
FG Cartesian coordinate system. The code to do this can probably be
borrowed from the LaRCsim code. It is located in
\texttt{ls\_geodesy.c}.
\subsection{Cartesian Coordinates}
Internally, all flight gear scenery is represented using a Cartesian
coordinate system. The origin of this coordinate system is the center
of the earth. The X axis runs along a line from the center of the
earth out to the equator at the zero meridian. The Z axis runs along
a line between the north and south poles with north being positive.
The Y axis is parallel to a line running through the center of the
earth out through the equator somewhere in the Indian Ocean. Figure
\ref{fig:coords} shows the orientation of the X, Y, and Z axes in
relationship to the earth.
\begin{figure}[hbt]
\centerline{
\psfig{file=coord.eps}
}
\caption{Flight Gear Coordinate System}
\label{fig:coords}
\end{figure}
\newpage
\subsection{Converting between coordinate systems}
Different aspects of the simulation will need to deal with positions
represented in the various coordinate systems. Typically map data is
presented in the geodetic coordinate system. The LaRCsim code uses
the geocentric coordinate system. FG will use a Cartesian coordinate
system for representing scenery internally. Potential add on items
such as GPS's will need to know positions in the geodetic coordinate
system, etc.
FG will need to be able to convert positions between any of these
coordinate systems. LaRCsim comes with code to convert back and forth
between geodetic and geocentric coordinates. So, we only need to
convert between geocentric and cartesian coordinates to complete the
picture. Converting from geocentric to cartesian coordinates is done
by using the following formula: \\
$x = cos(lon_\mathit{geocentric}) * cos(lat_\mathit{geocentric}) *
radius_\mathit{geocentric}$ \\
$y = sin(lon_\mathit{geocentric}) * cos(lat_\mathit{geocentric}) *
radius_\mathit{geocentric}$ \\
$z = sin(lat_\mathit{geocentric}) * radius_\mathit{geocentric}$
So far I haven't needed to convert from the cartesian coordinate
system back into any of the polar representations so I haven't derived
that part yet. However, it should be pretty straightforward.
\section{Scenery Representation}
This section is a work in progress. I am hashing out ideas as I
write, so please feel free to send me your comments and suggestions.
\subsection{External Scenery Representation}
This section should deal with the external file format(s) that FG can
use for input.
\subsection{Internal Scenery Representation}
This section describes how FG represents, manipulates, and
transforms scenery internally.
Internal, all FG scenery is defined using the coordinate system shown
in figure \ref{fig:coords}. This means that regardless of the
external scenery representation, FG will convert all object to it's
internal coordinate system when it loads the external file. Note,
when a default external FG scenery representation is created, its
representation should probably parallel the internal FG representation
as close as possible. This way, most necessary conversions can then
be done offline in advance.
\subsection{Scenery Partitioning}
For a first stab, scenery will be partitioned along longitude and
latitude lines. This will form trapezium shaped chunks. I'd like to
shoot for 10km x 10km chunks. So, as we move towards the poles, the
width in degrees of these areas will have to increase. Figure
\ref{fig:trap} shows an exaggerated scenery area.
\begin{figure}[hbt]
\centerline{
\psfig{file=trap.eps}
}
\caption{Scenery Partitioning Scheme}
\label{fig:trap}
\end{figure}
\subsection{Reference Points}
Each scenery area will have a reference point at the center of its
area. This reference point (for purposes of avoiding floating point
precision problems) defines the origin of a local coordinate system
which is oriented the same as the global coordinate system. The only
difference is the origin is translated from the center of the earth to
the center of the individual areas. Figure \ref{fig:reference}
demonstrates this.
\begin{figure}[hbt]
\centerline{
\psfig{file=ref.eps}
}
\caption{Reference Points and Translations}
\label{fig:reference}
\end{figure}
All the objects for a specific scenery area will be defined based on
this local coordinate system. For each scenery area we define a
vector $\vec{\mathbf{a}}$ which represents the distance from the
center of the earth to the local coordinate system.
\subsection{Putting the pieces of scenery together}
To render a scene, the scenery manager will need to load all the
nearby areas. Also, we define a vector $\vec{\mathbf{v}}$ which
represents the distance from the center of the earth to the current
view point. Before rendering each scenery area we translate it by
$\vec{\mathbf{a}} - \vec{\mathbf{v}}$. This moves all the current
scenery areas near the origin, while maintaining the relative
positions and orientations. All these transformations are inexpensive
to calculate and can be done easily with standard OpenGL calls.
It is straightforward to calculate the proper view point and up vector
so that the scenery will appear right side up when it is rendered.
\end{document}

View file

@ -0,0 +1,25 @@
#FIG 3.2
Landscape
Center
Inches
Letter
100.00
Single
0
1200 2
5 1 0 1 0 7 0 0 -1 0.000 0 1 0 0 6000.000 2700.000 4200 5100 6000 5700 7800 5100
5 1 1 1 0 7 0 0 -1 4.000 0 0 0 0 6000.000 7500.000 4200 5100 6000 4500 7800 5100
1 3 0 1 0 7 0 0 -1 0.000 1 0.0000 6000 5100 1814 1814 6000 5100 7575 6000
2 1 0 2 0 7 0 0 -1 0.000 0 0 -1 1 0 2
2 1 2.00 120.00 240.00
6000 5100 8400 5100
2 1 0 2 0 7 0 0 -1 0.000 0 0 -1 1 0 2
2 1 2.00 120.00 240.00
6000 5100 6000 2700
2 1 0 2 0 7 0 0 -1 0.000 0 0 -1 1 0 2
2 1 2.00 120.00 240.00
6000 5100 6900 4200
4 0 0 0 0 0 14 0.0000 4 195 1245 5925 2550 Z (North Pole)\001
4 0 0 0 0 0 14 0.0000 4 195 1485 6975 4125 Y (Indian Ocean)\001
4 0 0 0 0 0 14 0.0000 4 150 150 8550 5175 X\001
4 0 0 0 0 0 14 0.0000 4 195 2025 6750 5475 (Zero Meridian, Africa)\001

View file

@ -0,0 +1,43 @@
#FIG 3.2
Landscape
Center
Inches
Letter
100.00
Single
0
1200 2
1 3 2 1 0 7 0 0 -1 3.000 1 0.0000 6300 4800 1800 1800 6300 4800 8100 4800
1 1 0 2 0 7 0 0 -1 0.000 1 0.0000 6300 4800 2025 1500 6300 4800 8325 3300
1 3 0 1 0 0 0 0 20 0.000 1 0.0000 6300 4800 44 44 6300 4800 6344 4795
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2
2 1 1.00 60.00 120.00
7500 3600 8400 2700
2 1 1 1 0 7 0 0 -1 4.000 0 0 -1 0 0 2
6300 4800 7500 3600
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2
2 1 1.00 60.00 120.00
7500 3600 8700 3600
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2
2 1 1.00 60.00 120.00
7500 3600 8100 2400
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 1 2
2 1 1.00 60.00 120.00
2 1 1.00 60.00 120.00
8700 4200 6000 2850
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2
2 1 1.00 60.00 120.00
5625 4125 5400 3225
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2
2 1 1.00 60.00 120.00
6000 5475 6300 6300
2 1 1 1 0 7 0 0 -1 4.000 0 0 -1 0 0 2
7500 3600 6750 5100
4 0 0 0 0 0 14 0.0000 4 150 165 8550 4425 A\001
4 0 0 0 0 0 14 0.0000 4 150 150 5775 2925 C\001
4 0 0 0 0 0 14 0.0000 4 150 150 8550 3825 D\001
4 0 0 0 0 0 14 0.0000 4 150 135 8325 3075 E\001
4 0 0 0 0 0 14 0.0000 4 150 120 7800 2625 F\001
4 0 0 0 0 0 12 0.0000 4 180 1125 5100 4350 Perfect Sphere\001
4 0 0 0 0 0 12 0.0000 4 180 1980 5100 5400 True Earth ellipsoid shape\001
4 0 0 0 0 0 14 0.0000 4 150 135 7500 3900 B\001

View file

@ -0,0 +1,27 @@
#FIG 3.2
Landscape
Center
Inches
Letter
100.00
Single
0
1200 2
5 1 0 1 0 7 0 0 -1 0.000 0 1 0 0 8962.500 6000.000 3600 5100 3525 6000 3600 6900
5 1 0 1 0 7 0 0 -1 0.000 0 1 0 0 10762.500 6000.000 5400 5100 5325 6000 5400 6900
5 1 0 1 0 7 0 0 -1 0.000 0 1 0 0 4500.000 -262.500 3600 5100 4500 5175 5400 5100
5 1 0 1 0 7 0 0 -1 0.000 0 0 0 0 4500.000 1537.500 5400 6900 4500 6975 3600 6900
5 1 2 1 0 7 0 0 -1 3.000 0 1 0 0 9825.000 6075.000 4500 5175 4425 6000 4500 6975
5 1 2 1 0 7 0 0 -1 3.000 0 0 0 0 4425.000 637.500 5325 6000 4425 6075 3525 6000
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2
2 1 1.00 60.00 120.00
6000 5175 4425 6075
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2
2 1 1.00 60.00 120.00
6000 5175 8550 5175
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2
2 1 1.00 60.00 120.00
6000 5175 6000 2625
4 0 0 0 0 0 18 0.0000 4 195 180 8475 5475 X\001
4 0 0 0 0 0 18 0.0000 4 195 180 5700 2700 Y\001
4 0 0 0 0 0 18 0.0000 4 195 180 4500 5850 Z\001

47
CoordinateSystem/ref.fig Normal file
View file

@ -0,0 +1,47 @@
#FIG 3.2
Landscape
Center
Inches
Letter
100.00
Single
0
1200 2
5 1 0 1 0 7 0 0 -1 0.000 0 1 0 0 6900.000 3304.688 5100 5700 6975 6300 8700 5700
5 1 1 1 0 7 0 0 -1 4.000 0 0 0 0 6900.000 8100.000 5100 5700 6900 5100 8700 5700
5 1 0 1 0 7 0 0 -1 4.000 0 0 0 0 6900.000 5175.000 5925 5100 6075 4650 6375 4350
5 1 0 1 0 7 0 0 -1 4.000 0 0 0 0 8887.500 5062.500 6600 5325 6600 4800 6675 4425
5 1 0 1 0 7 0 0 -1 4.000 0 1 0 0 6675.000 3975.000 5925 5100 6225 5250 6600 5325
5 1 0 1 0 7 0 0 -1 4.000 0 1 0 0 6600.000 4087.500 6375 4350 6525 4425 6675 4425
1 3 0 1 0 7 0 0 -1 0.000 1 0.0000 6900 5700 1802 1802 6900 5700 8700 5775
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2
2 1 1.00 60.00 120.00
6300 4800 6300 3600
2 1 0 2 0 7 0 0 -1 0.000 0 0 -1 1 0 2
2 1 2.00 120.00 240.00
6900 5700 9300 5700
2 1 0 2 0 7 0 0 -1 0.000 0 0 -1 1 0 2
2 1 2.00 120.00 240.00
6900 5700 7800 4800
2 1 0 2 0 7 0 0 -1 0.000 0 0 -1 1 0 2
2 1 2.00 120.00 240.00
6900 5700 6900 3300
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2
2 1 1.00 60.00 120.00
6300 4800 7200 4800
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2
2 1 1.00 60.00 120.00
6300 4800 6750 4350
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2
0 0 1.00 60.00 120.00
6900 5700 6300 4800
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2
0 0 1.00 60.00 120.00
6075 4950 6300 4950
4 0 0 0 0 0 14 0.0000 4 150 120 6825 3150 Z\001
4 0 0 0 0 0 14 0.0000 4 150 135 7875 4800 Y\001
4 0 0 0 0 0 14 0.0000 4 150 150 9450 5775 X\001
4 0 0 0 0 0 12 0.0000 4 135 135 7275 4875 X\001
4 0 0 0 0 0 12 0.0000 4 135 135 6675 4275 Y\001
4 0 0 0 0 0 12 0.0000 4 135 120 6300 3525 Z\001
4 0 0 0 0 0 12 0.0000 4 90 90 6150 5100 a\001

16
CoordinateSystem/trap.fig Normal file
View file

@ -0,0 +1,16 @@
#FIG 3.2
Landscape
Center
Inches
Letter
100.00
Single
0
1200 2
5 1 0 1 0 7 0 0 -1 0.000 0 1 0 0 6900.000 3304.688 5100 5700 6975 6300 8700 5700
5 1 1 1 0 7 0 0 -1 4.000 0 0 0 0 6900.000 8100.000 5100 5700 6900 5100 8700 5700
5 1 0 1 0 7 0 0 -1 4.000 0 0 0 0 6900.000 5175.000 5925 5100 6075 4650 6375 4350
5 1 0 1 0 7 0 0 -1 4.000 0 0 0 0 8887.500 5062.500 6600 5325 6600 4800 6675 4425
5 1 0 1 0 7 0 0 -1 4.000 0 1 0 0 6675.000 3975.000 5925 5100 6225 5250 6600 5325
5 1 0 1 0 7 0 0 -1 4.000 0 1 0 0 6600.000 4087.500 6375 4350 6525 4425 6675 4425
1 3 0 1 0 7 0 0 -1 0.000 1 0.0000 6900 5700 1802 1802 6900 5700 8700 5775