Initial revisions.
This commit is contained in:
parent
2964dc73ee
commit
99a937d9c3
6 changed files with 711 additions and 0 deletions
140
Astro/Stars.info
Normal file
140
Astro/Stars.info
Normal file
|
@ -0,0 +1,140 @@
|
|||
=============================================================================
|
||||
|
||||
|
||||
A basic set of bright stars -- taken from the xephem program.
|
||||
|
||||
Based on the 5th Revised edition of the Yale Bright Star Catalog, 1991, from
|
||||
ftp://adc.gsfc.nasa.gov/pub/adc/archives/catalogs/5/5050.
|
||||
|
||||
Only those entries with a Bayer and/or Flamsteed number are retained
|
||||
here.
|
||||
|
||||
Format: Constellation BayerN-Flamsteed, as available. Bayer is
|
||||
truncated as requried to enforce a maximum total length of 13
|
||||
imposed within xephem.
|
||||
|
||||
Common names were then overlayed by closest position match from
|
||||
hand-edited a list supplied by Robert Tidd (inp@violet.berkeley.edu)
|
||||
and Alan Paeth (awpaeth@watcgl.waterloo.edu)
|
||||
|
||||
|
||||
=============================================================================
|
||||
|
||||
|
||||
Data file format:
|
||||
|
||||
name , right assention (radians) , declination (radians) , magnitude (0.0 - 1.0)
|
||||
|
||||
|
||||
=============================================================================
|
||||
|
||||
|
||||
The following information is taken from:
|
||||
|
||||
http://www.lclark.edu/~wstone/skytour/celest.html
|
||||
|
||||
Please visit the above site, it contains much more complete information.
|
||||
|
||||
CELESTIAL MEASUREMENTS
|
||||
|
||||
RIGHT ASCENSION AND DECLINATION
|
||||
|
||||
Although we know that the objects we see in the sky are of different
|
||||
sizes and at different distances from us, it is convenient to
|
||||
visualize all the objects as being attached to an imaginary sphere
|
||||
surrounding the Earth. From our vantage point, the sky certainly looks
|
||||
like a dome (the half of the celestial sphere above our local
|
||||
horizon). The celestial sphere is mapped in Right Ascension (RA) and
|
||||
Declination (Dec). Declination is the celestial equivalent of
|
||||
latitude, and is simply the Earth's latitude lines projected onto the
|
||||
celestial sphere. A star that can be directly overhead as seen from
|
||||
the Earth's Equator (0 degrees latitude) is said to be on the
|
||||
Celestial Equator, and has a declination of 0 degrees . The North
|
||||
Star, Polaris, is very nearly overhead as seen from the North Pole (90
|
||||
degrees North latitude). The point directly over the North Pole on the
|
||||
celestial sphere is called the North Celestial Pole, and has a
|
||||
declination of +90 degrees . Northern declinations are given positive
|
||||
signs, and southern declinations are given negative signs. So, the
|
||||
South Celestial Pole has a declination of -90 degrees .
|
||||
|
||||
Right Ascension is the equivalent of longitude, but since the Earth
|
||||
rotates with respect to the celestial sphere we cannot simply use the
|
||||
Greenwich Meridian as 0 degrees RA. Instead, we set the zero point as
|
||||
the place on the celestial sphere where the Sun crosses the Celestial
|
||||
Equator (0 degrees Dec) at the vernal (spring) equinox. The arc of
|
||||
the celestial sphere from the North Celestial Pole through this point
|
||||
to the South Celestial Pole is designated as Zero hours RA. Right
|
||||
Ascension increases eastward, and the sky is divided up into 24
|
||||
hours. This designation is convenient because it represents the
|
||||
sidereal day, the time it takes for the Earth to make one rotation
|
||||
relative to the celestial sphere. If you pointed a telescope (with no
|
||||
motor drive) at the coordinates (RA=0h, Dec=0 degrees ), and came back
|
||||
one hour later, the telescope would then be pointing at (RA=1h, Dec=0
|
||||
degrees ). Because the Earth's revolution around the Sun also
|
||||
contributes to the apparent motion of the stars, the day we keep time
|
||||
by (the solar day) is about four minutes longer than the sidereal
|
||||
day. So, if you pointed a telescope at (RA=0h, Dec=0 degrees ) and
|
||||
came back 24 hours later, the telescope would now be pointing at
|
||||
(RA=0h 4m, Dec=0 degrees). A consequence is that the fixed stars
|
||||
appear to rise about four minutes earlier each day.
|
||||
|
||||
|
||||
=============================================================================
|
||||
|
||||
|
||||
From: steve@mred.bgm.link.com (Steve Baker)
|
||||
Subject: Re: FG: Fun in the sun ...
|
||||
Date: Tue, 5 Aug 97 15:37:27 -0500
|
||||
|
||||
You probably ought to get the stars right too - there is a database
|
||||
of the 300 brightest stars in the 'Yale Bright Star Catalog' - which
|
||||
I enclose below. I'd guess that you could navigate by the stars -
|
||||
so this might not be a completely useless feature - right?
|
||||
|
||||
Anyway, if all else fails - and the flight sim never gets going - we
|
||||
could at least sell this as a planetarium :-)
|
||||
|
||||
The format of the star data is:
|
||||
|
||||
Name Right-Ascension Declination Magnitude
|
||||
|
||||
(Ascension and Declination are in radians)
|
||||
|
||||
We took the magnitude value, scaled it by 0.8 and added 0.2 to make
|
||||
a 0->1 brightness value. Using the raw data created too many very
|
||||
dark stars.
|
||||
|
||||
Originally, there were constellation names as sub-headings - but I
|
||||
think I deleted them to make the file easier to parse :-) That makes
|
||||
the 'name' field pretty pointless.
|
||||
|
||||
if you are still talking about the geocentric coordinate system
|
||||
where the terrain is modelled with Z pointing towards the North
|
||||
pole, X out of the 0 degree meridian at the equator and Y out at the
|
||||
Indian ocean at the equator - then you can position the stars using:
|
||||
|
||||
star[ X ] = fsin ( ra ) * fcos( decl ) ;
|
||||
star[ Y ] = fcos ( ra ) * fcos( decl ) ;
|
||||
star[ Z ] = fsin ( decl ) ;
|
||||
|
||||
(which you can precompute at startup)
|
||||
|
||||
...and then rotate them about the Z axis using GMT*two_pi/24.0
|
||||
#
|
||||
Put them all in a display list - use GL_POINTS as the primitive...
|
||||
|
||||
glNewList ( ...whatever... )
|
||||
glBegin ( GL_POINTS ) ;
|
||||
|
||||
for ( int i = 0 ; i < num_stars ; i++ ) {
|
||||
glColor3f ( star_brightness[i], star_brightness[i], star_brightness[i] ) ;
|
||||
glVertex3f ( star_x[i], star_y[i], star_z[i] ) ;
|
||||
}
|
||||
|
||||
glEnd () ;
|
||||
glEndList () ;
|
||||
|
||||
You need to draw them out by the far clip plane so they don't occult
|
||||
anything. Then you need to translate them using the same x/y/z as
|
||||
the eyepoint so that you can never fly any closer to them.
|
||||
|
207
Astro/Stars.tex
Normal file
207
Astro/Stars.tex
Normal file
|
@ -0,0 +1,207 @@
|
|||
%
|
||||
% `Stars.tex' -- describes our procedure for drawing stars
|
||||
%
|
||||
% Written by Curtis Olson. Started December, 1997.
|
||||
%
|
||||
% $Id$
|
||||
%------------------------------------------------------------------------
|
||||
|
||||
|
||||
\documentclass[12pt]{article}
|
||||
|
||||
\usepackage{anysize}
|
||||
\papersize{11in}{8.5in}
|
||||
\marginsize{1in}{1in}{1in}{1in}
|
||||
|
||||
\usepackage{amsmath}
|
||||
|
||||
\usepackage{epsfig}
|
||||
|
||||
\usepackage{setspace}
|
||||
\onehalfspacing
|
||||
|
||||
\usepackage{url}
|
||||
|
||||
|
||||
\begin{document}
|
||||
|
||||
|
||||
\title{
|
||||
Flight Gear Stars Representation and Rendering.
|
||||
}
|
||||
|
||||
|
||||
\author{
|
||||
Curtis L. Olson\\
|
||||
(\texttt{curt@me.umn.edu})
|
||||
}
|
||||
|
||||
|
||||
\maketitle
|
||||
|
||||
|
||||
\section{Introduction}
|
||||
|
||||
Flight Gear attempts to render the top several hundred stars in the
|
||||
correct position in the sky for the current time and position as will
|
||||
as rendering these stars with the correct ``magnitude''.
|
||||
|
||||
This document will give a quick overview of our approach.
|
||||
|
||||
\section{Resources}
|
||||
|
||||
\subsubsection{XEphem}
|
||||
|
||||
The set of bright stars was extracted from the xephem program. For a
|
||||
full list of features and the latest news, please see the xephem home
|
||||
page at \url{http://iraf.noao.edu/~ecdowney/xephem.html}. The XEphem
|
||||
star list was itself taken from the Yale Bright Star Catalog.
|
||||
|
||||
\begin{quote}
|
||||
Based on the 5th Revised edition of the Yale Bright Star Catalog,
|
||||
1991, from ftp://adc.gsfc.nasa.gov/pub/adc/archives/catalogs/5/5050.
|
||||
|
||||
Only those entries with a Bayer and/or Flamsteed number are retained
|
||||
here.
|
||||
|
||||
Format: Constellation BayerN-Flamsteed, as available. Bayer is
|
||||
truncated as required to enforce a maximum total length of 13
|
||||
imposed within xephem.
|
||||
|
||||
Common names were then overlayed by closest position match from
|
||||
hand-edited a list supplied by Robert Tidd (inp@violet.berkeley.edu)
|
||||
and Alan Paeth (awpaeth@watcgl.waterloo.edu)
|
||||
\end{quote}
|
||||
|
||||
The author of XEphem, Elwood Downey (ecdowney@noao.edu), was very
|
||||
instrumental in helping me understand sidereal time, accurate star
|
||||
placement, and even contributed some really hairy sections of code.
|
||||
Thanks Elwood!
|
||||
|
||||
|
||||
\section{Terminology and Definitions}
|
||||
|
||||
The following information is repeated verbatim from
|
||||
\url{http://www.lclark.edu/~wstone/skytour/celest.html}: If you are
|
||||
interested in these sorts of things I urge you to visit this site. It
|
||||
contains much more complete information.
|
||||
|
||||
\subsection{Celestial Measurements}
|
||||
|
||||
Although we know that the objects we see in the sky are of different
|
||||
sizes and at different distances from us, it is convenient to
|
||||
visualize all the objects as being attached to an imaginary sphere
|
||||
surrounding the Earth. From our vantage point, the sky certainly
|
||||
looks like a dome (the half of the celestial sphere above our local
|
||||
horizon). The celestial sphere is mapped in Right Ascension (RA) and
|
||||
Declination (Dec).
|
||||
|
||||
\subsubsection{Declination}
|
||||
|
||||
Declination is the celestial equivalent of latitude, and is simply the
|
||||
Earth's latitude lines projected onto the celestial sphere. A star
|
||||
that can be directly overhead as seen from the Earth's Equator (0
|
||||
degrees latitude) is said to be on the Celestial Equator, and has a
|
||||
declination of 0 degrees . The North Star, Polaris, is very nearly
|
||||
overhead as seen from the North Pole (90 degrees North latitude). The
|
||||
point directly over the North Pole on the celestial sphere is called
|
||||
the North Celestial Pole, and has a declination of +90 degrees .
|
||||
Northern declinations are given positive signs, and southern
|
||||
declinations are given negative signs. So, the South Celestial Pole
|
||||
has a declination of -90 degrees .
|
||||
|
||||
\subsubsection{Right Ascension \& Sidereal Time}
|
||||
|
||||
Right Ascension is the equivalent of longitude, but since the Earth
|
||||
rotates with respect to the celestial sphere we cannot simply use the
|
||||
Greenwich Meridian as 0 degrees RA. Instead, we set the zero point as
|
||||
the place on the celestial sphere where the Sun crosses the Celestial
|
||||
Equator (0 degrees Dec) at the vernal (spring) equinox. The arc of
|
||||
the celestial sphere from the North Celestial Pole through this point
|
||||
to the South Celestial Pole is designated as Zero hours RA. Right
|
||||
Ascension increases eastward, and the sky is divided up into 24
|
||||
hours. This designation is convenient because it represents the
|
||||
sidereal day, the time it takes for the Earth to make one rotation
|
||||
relative to the celestial sphere. If you pointed a telescope (with no
|
||||
motor drive) at the coordinates (RA=0h, Dec=0 degrees ), and came back
|
||||
one hour later, the telescope would then be pointing at (RA=1h, Dec=0
|
||||
degrees ). Because the Earth's revolution around the Sun also
|
||||
contributes to the apparent motion of the stars, the day we keep time
|
||||
by (the solar day) is about four minutes longer than the sidereal
|
||||
day. So, if you pointed a telescope at (RA=0h, Dec=0 degrees ) and
|
||||
came back 24 hours later, the telescope would now be pointing at
|
||||
(RA=0h 4m, Dec=0 degrees). A consequence is that the fixed stars
|
||||
appear to rise about four minutes earlier each day.
|
||||
|
||||
|
||||
\subsection{Implementation}
|
||||
|
||||
Here is a brief overview of how stars were implemented in Flight Gear.
|
||||
The right ascension and declination of each star is used to build a
|
||||
structure of point objects to represent the stars. The magnitude is
|
||||
mapped into a color on the gray/white continuum. The points are
|
||||
positioned just inside the far clip plane. When rendering the stars,
|
||||
this structure (display list) is rotated about the $Z$ axis by the
|
||||
current sidereal time and translated to the current view point.
|
||||
|
||||
\subsubsection{Data file format}
|
||||
|
||||
The star information is stored in a simple data file called
|
||||
``Stars.dat'' with the following comma delimited format: name, right
|
||||
ascension(radians), declination(radians), magnitude(smaller is
|
||||
brighter). Here is an extract of the data file:
|
||||
|
||||
\begin{verbatim}
|
||||
Sirius,1.767793,-0.266754,-1.460000
|
||||
Canopus,1.675305,-0.895427,-0.720000
|
||||
Arcturus,3.733528,0.334798,-0.040000
|
||||
Rigil Kentaurus,3.837972,-1.032619,-0.010000
|
||||
Vega,4.873563,0.676902,0.030000
|
||||
Capella,1.381821,0.802818,0.080000
|
||||
Rigel,1.372432,-0.136107,0.120000
|
||||
Procyon,2.004082,0.091193,0.380000
|
||||
Achernar,0.426362,-0.990707,0.460000
|
||||
\end{verbatim}
|
||||
|
||||
\subsubsection{Building the display list}
|
||||
|
||||
The display list is built up from a collection of point objects as the
|
||||
star data file is loaded. For each star, the magnitude is mapped into
|
||||
a brightness value from 0.0 to 1.0 with 1.0 being the brightest. Our
|
||||
coordinate system is described in the coordinate system document: Z
|
||||
points towards the North pole, X out of the 0 degree meridian at the
|
||||
equator, and Y out at the Indian ocean at the equator. Given this
|
||||
coordinate system, the position of each star at 0:00H sidereal time is
|
||||
calculated as follows:
|
||||
|
||||
\begin{align}
|
||||
x &= \mathrm{distance} * \cos(\mathrm{rightascension}) *
|
||||
\cos(\mathrm{declination}) \\
|
||||
y &= \mathrm{distance} * \sin(\mathrm{rightascension}) *
|
||||
\cos(\mathrm{declination}) \\
|
||||
z &= \mathrm{distance} * \sin(\mathrm{declination})
|
||||
\end{align}
|
||||
|
||||
\subsubsection{Transformations and Rendering}
|
||||
|
||||
The tricky part about rendering the stars is calculating sidereal time
|
||||
correctly. Here's where Elwood Downey saved my butt. 0:00H sidereal
|
||||
time aligns with 12:00 noon GMT time on March 21 of every year. After
|
||||
that they diverge by about 4 minutes per day. The solar day is
|
||||
approximately 4 minutes longer than the side real day. Once you know
|
||||
the proper sidereal time, you simply translate the center of the star
|
||||
structure to the current view point, then rotate this structure about
|
||||
the Z axis by the current sidereal time.
|
||||
|
||||
The stars are drawn out by the far clip plane so they don't occult
|
||||
anything. They are translated using the same x/y/z as the eye point
|
||||
so that you can never fly any closer to them.
|
||||
|
||||
\end{document}
|
||||
|
||||
|
||||
%------------------------------------------------------------------------
|
||||
% $Log$
|
||||
% Revision 1.1 1999/02/14 19:10:47 curt
|
||||
% Initial revisions.
|
||||
%
|
228
Sky/Sky.tex
Normal file
228
Sky/Sky.tex
Normal file
|
@ -0,0 +1,228 @@
|
|||
%
|
||||
% `Sky.tex' -- describes the sky rendering procedure
|
||||
%
|
||||
% Written by Curtis Olson. Started December, 1997.
|
||||
%
|
||||
% $Id$
|
||||
%------------------------------------------------------------------------
|
||||
|
||||
|
||||
\documentclass[12pt]{article}
|
||||
|
||||
\usepackage{anysize}
|
||||
\papersize{11in}{8.5in}
|
||||
\marginsize{1in}{1in}{1in}{1in}
|
||||
|
||||
\usepackage{amsmath}
|
||||
|
||||
\usepackage{epsfig}
|
||||
|
||||
\usepackage{setspace}
|
||||
\onehalfspacing
|
||||
|
||||
\usepackage{url}
|
||||
|
||||
|
||||
\begin{document}
|
||||
|
||||
|
||||
\title{
|
||||
Flight Gear Sky Representation and Rendering.
|
||||
}
|
||||
|
||||
|
||||
\author{
|
||||
Curtis L. Olson\\
|
||||
(\texttt{curt@me.umn.edu})
|
||||
}
|
||||
|
||||
|
||||
\maketitle
|
||||
|
||||
|
||||
\section{Introduction}
|
||||
|
||||
No flight simulator should be without a nice sky that smoothly
|
||||
transitions into haze at the horizon. Such a sky should also be able
|
||||
to render sunrise and sunset effects. This document describes how we
|
||||
have implemented such a sky.
|
||||
|
||||
\section{Overview}
|
||||
|
||||
The sky is represent as a 12 sided dome (or upside down bowl if you
|
||||
prefer.) Figure \ref{fig:dome} shows how a 6 sided dome might be
|
||||
constructed.
|
||||
|
||||
\begin{figure}[hbt]
|
||||
\centerline{
|
||||
\psfig{file=dome.eps}
|
||||
}
|
||||
\caption{Simplified (6 Sided) Sky Dome}
|
||||
\label{fig:dome}
|
||||
\end{figure}
|
||||
|
||||
The center section can be constructed with a triangle fan. The inner
|
||||
and outer ``skirts'' can be constructed with triangle strips.
|
||||
|
||||
The colors of each vertex can be independently controlled to achieve
|
||||
sky to haze transitions, sunrise/sunset effects with a pinkish/oranges
|
||||
glow, and one side of the sky can easily be made brighter than the
|
||||
other. By enabling smooth shading in OpenGL, the colors will be
|
||||
blended together for a very nice effect.
|
||||
|
||||
|
||||
\section{Implementation}
|
||||
|
||||
This sections describes how the sky has been implemented in OpenGL.
|
||||
|
||||
\subsection{Vertex Generation}
|
||||
|
||||
The sky dome structure is intended to be centered over the current
|
||||
view point at sea level. This way we could paste cloud textures on
|
||||
the dome if we liked. So, we simply have to generate vertices for a
|
||||
fixed dome, and then use OpenGL calls to transform and rotate it to
|
||||
the desired place. Please refer to the actual code
|
||||
(.../Src/Scenery/sky.c) for specifics, but
|
||||
to generate the vertices we simply create a 12 element array for the
|
||||
inner set of vertices, another 12 element array for the middle set of
|
||||
vertices and a last 12 element array for the outer set of vertices.
|
||||
|
||||
\subsection{Vertex Coloring}
|
||||
|
||||
For each vertex position array, there is a corresponding vertex color
|
||||
array. This way we don't have to compute each vertex color every
|
||||
iteration. Also, by being able to individually control the color at
|
||||
each vertex, we can do all sorts of nice sky to haze blending with
|
||||
dusk and dawn effects. Again, please refer to the source
|
||||
(.../Src/Scenery/sky.c) for specific details on how the coloring is
|
||||
implemented. However, here's the quick overview.
|
||||
|
||||
\subsubsection{Day and Night Coloring}
|
||||
|
||||
For the general middle of the day, or middle of the night sky, we
|
||||
already know the desired sky color, and the haze color. This is
|
||||
computed elsewhere based on the current sun position. During the
|
||||
night these colors are both nearly black. During the dawn they are
|
||||
smoothly transitioned to day time colors. And, during the dusk they
|
||||
are smoothly transitioned back to night time colors.
|
||||
|
||||
The center of the dome is assigned the current sky color. The color
|
||||
of the first inner ring of vertices is weighted 70\% towards the sky
|
||||
color and 30\% towards the fog color.
|
||||
|
||||
Then color of the middle ring of vertices is weighted 10\% towards the
|
||||
sky color and 90\% towards the fog color.
|
||||
|
||||
The the outer ring of vertices are assigned the current fog color.
|
||||
|
||||
\subsubsection{Dusk and Dawn Effects}
|
||||
|
||||
Dusk and dawn effects can be accomplished by controlling the color of
|
||||
the vertices. Rather than trying to figure out which vertices are
|
||||
near the current sun position, I just rotate the dome so the 0'th
|
||||
vertex of each ring (and the center fan) align with the sun. This
|
||||
makes it easier to calculate vertex colors. But, there is a fair
|
||||
amount of work involved in calculating the proper dome rotation.
|
||||
|
||||
\begin{figure}[hbt]
|
||||
\centerline{
|
||||
\psfig{file=earth.eps}
|
||||
}
|
||||
\caption{Overview of Earth}
|
||||
\label{fig:earth}
|
||||
\end{figure}
|
||||
|
||||
Figure \ref{fig:earth} shows an overview of the setup. $P$, the
|
||||
current view position, and $\mathbf{n}$, the local ``up'' vector,
|
||||
define the plane which is tangent to the Earth's surface at point $P$.
|
||||
Just for a quick review of your linear algebra, given $\mathbf{v_0}$,
|
||||
the position vector of $P$ and $\mathbf{v}$, the position vector of
|
||||
some other arbitrary point on the plane, and $\mathbf{n}$, the normal
|
||||
to the plane, then the vector $\mathbf{n}$ and the vector $(\mathbf{v}
|
||||
- \mathbf{v_0})$ are orthogonal (perpendicular.) If the two vectors
|
||||
are orthogonal then their dot product will be zero, so the following
|
||||
must be true:
|
||||
|
||||
\begin{equation}
|
||||
\mathbf{n} \cdot ( \mathbf{v} - \mathbf{v_0} ) = 0
|
||||
\end{equation}
|
||||
|
||||
This is the vector equation of the plane and can be rewritten as:
|
||||
|
||||
\begin{align}
|
||||
a(x - x_0) + b(y - y_0) + c(z - z_0) &= 0 \\
|
||||
ax + by + cz - (\mathbf{n} \cdot \mathbf{v_0}) &= 0
|
||||
\end{align}
|
||||
|
||||
We want to find a vector $\mathbf{v}$ representing the
|
||||
direction along the current tangent plane towards the position on the
|
||||
Earth where the Sun is directly overhead. The vector $\mathbf{u}$ is
|
||||
defined as $\vec{\mathbf{PS}}$.
|
||||
|
||||
\begin{figure}[hbt]
|
||||
\centerline{
|
||||
\psfig{file=local.eps}
|
||||
}
|
||||
\caption{Vectors and Points in Local Coordinate System}
|
||||
\label{fig:local}
|
||||
\end{figure}
|
||||
|
||||
Figure \ref{fig:local} shows a more detailed ``local'' view of the
|
||||
points and vectors involved. The point, $P$, is the current view
|
||||
point. The vector, $\mathbf{n}$, is the local up vector. $S$
|
||||
represents the current position on the Earth's surface where the Sun
|
||||
is directly overhead. We want to find the vector, $\mathbf{v}$ which
|
||||
is a projection of $\mathbf{u}$ onto the plane defined by $P$ and
|
||||
$\mathbf{n}$.
|
||||
|
||||
To do this we first calculate $\mathbf{u_1}$ which is the shortest
|
||||
distance from point $S$ to the tangent plane.
|
||||
|
||||
\begin{equation}
|
||||
\mathbf{u_1} = \frac { \mathbf{n} \cdot \mathbf{u} }
|
||||
{ {\| \mathbf{n} \|}^2 } \mathbf{n}
|
||||
\end{equation}
|
||||
|
||||
Armed with $\mathbf{u_1}$ we can now calculate
|
||||
$\mathbf{v}$ which is the local surface direction on the tangent
|
||||
plane towards the sun, $S$.
|
||||
|
||||
\begin{equation}
|
||||
\mathbf{v} = \mathbf{v_0} + \mathbf{u} - \mathbf{u_1}
|
||||
\end{equation}
|
||||
|
||||
Ok, so now we have $\mathbf{v}$, but the fun doesn't stop here. Now
|
||||
we need to calculate a rotation angle $\theta$ about $\mathbf{n}$ to
|
||||
align our dome with $\mathbf{v}$. The origin of the dome always
|
||||
aligns with a vector pointing directly South. So, we need to repeat
|
||||
the above procedure to map a vector pointing straight down $( 0, 0,
|
||||
-\mathbf{z} )$ onto our tangent plane to produce the local, surface,
|
||||
south vector $\mathbf{w}$. We then take the $\arccos()$ of the dot product
|
||||
of $\mathbf{v}$ with $\mathbf{w}$.
|
||||
|
||||
\begin{equation}
|
||||
\theta = \arccos( \mathbf{v} \cdot \mathbf{w} )
|
||||
\end{equation}
|
||||
|
||||
Whew, that gives us the angle we want. Well almost, not quite. The
|
||||
problem is that the dot product returns a number in the range of
|
||||
$(-1.0 \ldots 1.0)$. Thus, the $\arccos()$ function returns a $\theta$
|
||||
in the range of $(0.0 \ldots 180.0)$. But this is not enough
|
||||
information to determine if $\mathbf{v}$ is in the east hemisphere or
|
||||
west hemisphere and if this angle should be positive or negative.
|
||||
|
||||
So, to get that last piece of information we need, we can rotate the
|
||||
vector $\mathbf{w}$ by 90 degrees about $\mathbf{n}$. This gives us
|
||||
the local surface east vector on the tangent plane. Taking the dot
|
||||
product of $\mathbf{v}$ and the local east vector tells us which
|
||||
hemisphere $\mathbf{v}$ is in. And, from this, we can uniquely
|
||||
determine the proper angle for the sky dome rotation.
|
||||
|
||||
\end{document}
|
||||
|
||||
|
||||
%------------------------------------------------------------------------
|
||||
% $Log$
|
||||
% Revision 1.1 1999/02/14 19:12:21 curt
|
||||
% Initial revisions.
|
||||
%
|
47
Sky/dome.fig
Normal file
47
Sky/dome.fig
Normal file
|
@ -0,0 +1,47 @@
|
|||
#FIG 3.2
|
||||
Portrait
|
||||
Center
|
||||
Inches
|
||||
Letter
|
||||
100.00
|
||||
Single
|
||||
0
|
||||
1200 2
|
||||
2 1 0 2 0 7 0 0 -1 0.000 0 0 -1 0 0 7
|
||||
4800 2700 3375 3450 4050 4500 6600 4500 7725 3450 6750 2700
|
||||
4800 2700
|
||||
2 1 0 2 0 7 0 0 -1 0.000 0 0 -1 0 0 8
|
||||
3375 3450 2700 4500 2400 5400 3300 7200 7500 7200 8700 5400
|
||||
8400 4500 7725 3450
|
||||
2 1 0 2 0 7 0 0 -1 0.000 0 0 -1 0 0 4
|
||||
2700 4500 3450 5850 7200 5850 8400 4500
|
||||
2 1 0 2 0 7 0 0 -1 0.000 0 0 -1 0 0 3
|
||||
3300 7200 3450 5850 4050 4500
|
||||
2 1 0 2 0 7 0 0 -1 0.000 0 0 -1 0 0 3
|
||||
6600 4500 7200 5850 7500 7200
|
||||
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
|
||||
3375 3450 3450 5850
|
||||
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
|
||||
4050 4500 7200 5850
|
||||
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
|
||||
6600 4500 8400 4500
|
||||
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
|
||||
2700 4500 3300 7200
|
||||
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
|
||||
3450 5850 7500 7200
|
||||
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
|
||||
7200 5850 8700 5400
|
||||
2 1 2 1 0 7 0 0 -1 4.000 0 0 -1 0 0 4
|
||||
2700 4500 4125 3600 7275 3600 8400 4500
|
||||
2 1 2 1 0 7 0 0 -1 4.000 0 0 -1 0 0 3
|
||||
6750 2700 7275 3600 7350 4350
|
||||
2 1 0 1 0 7 0 0 -1 4.000 0 0 -1 0 0 3
|
||||
4050 4500 5625 3075 6750 2700
|
||||
2 1 0 1 0 7 0 0 -1 4.000 0 0 -1 0 0 3
|
||||
4800 2700 5625 3075 6600 4500
|
||||
2 1 2 1 0 7 0 0 -1 4.000 0 0 -1 0 0 4
|
||||
2400 5400 4050 4350 7350 4350 8700 5400
|
||||
2 1 2 1 0 7 0 0 -1 4.000 0 0 -1 0 0 3
|
||||
4050 4350 4125 3600 4800 2700
|
||||
2 1 0 1 0 7 0 0 -1 4.000 0 0 -1 0 0 3
|
||||
3375 3450 5625 3075 7725 3450
|
44
Sky/earth.fig
Normal file
44
Sky/earth.fig
Normal file
|
@ -0,0 +1,44 @@
|
|||
#FIG 3.2
|
||||
Landscape
|
||||
Center
|
||||
Inches
|
||||
Letter
|
||||
100.00
|
||||
Single
|
||||
-2
|
||||
1200 2
|
||||
5 1 0 2 0 7 0 0 -1 0.000 0 1 0 0 4800.000 -4650.000 2400 4800 4800 5100 7200 4800
|
||||
5 1 0 2 0 7 0 0 -1 0.000 0 0 0 0 14250.000 4800.000 4800 7200 4500 4800 4800 2400
|
||||
5 1 2 1 0 7 0 0 -1 3.000 0 1 0 0 -4650.000 4800.000 4800 7200 5100 4800 4800 2400
|
||||
5 1 2 1 0 7 0 0 -1 3.000 0 0 0 0 4800.000 14250.000 2400 4800 4800 4500 7200 4800
|
||||
1 3 0 2 0 7 0 0 -1 0.000 1 0.0000 4800 4800 2400 2400 4800 4800 7200 4800
|
||||
1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 4800 4800 25 25 4800 4800 4820 4815
|
||||
1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 6300 4200 25 25 6300 4200 6320 4215
|
||||
2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2
|
||||
4500 5100 5100 4500
|
||||
2 1 0 1 0 7 0 0 -1 4.000 0 0 -1 0 0 2
|
||||
6600 5400 7800 4200
|
||||
2 1 2 1 0 7 0 0 -1 3.000 0 0 -1 0 0 2
|
||||
2400 4800 7200 4800
|
||||
2 1 0 2 0 7 0 0 -1 6.000 0 0 -1 0 0 5
|
||||
6600 4200 6600 6600 7800 5400 7800 3000 6600 4200
|
||||
2 1 0 1 0 7 0 0 -1 4.000 0 0 -1 0 0 2
|
||||
7200 3600 7200 6000
|
||||
2 1 0 1 0 -1 0 0 20 4.000 0 0 -1 1 0 2
|
||||
1 1 1.00 60.00 120.00
|
||||
7200 4800 6750 4200
|
||||
2 1 0 1 0 -1 0 0 20 4.000 0 0 -1 1 0 2
|
||||
1 1 1.00 60.00 120.00
|
||||
7200 4800 6300 4200
|
||||
2 1 2 1 0 -1 0 0 20 3.000 0 0 -1 1 0 2
|
||||
1 1 1.00 60.00 120.00
|
||||
6750 4200 6300 4200
|
||||
2 1 0 1 0 -1 0 0 20 4.000 0 0 -1 1 0 2
|
||||
1 1 1.00 60.00 120.00
|
||||
7200 4800 8100 4800
|
||||
4 0 0 0 0 0 14 0.0000 4 105 105 8175 4875 n\001
|
||||
4 0 0 0 0 0 14 0.0000 4 150 120 7275 5025 P\001
|
||||
4 0 0 0 0 0 14 0.0000 4 105 105 6825 4200 v\001
|
||||
4 0 0 0 0 0 14 0.0000 4 195 645 5625 4275 S (Sun)\001
|
||||
4 0 0 0 0 0 14 0.0000 4 105 105 6375 4500 u\001
|
||||
4 0 0 0 0 0 14 0.0000 4 195 525 4800 5025 Origin\001
|
45
Sky/local.fig
Normal file
45
Sky/local.fig
Normal file
|
@ -0,0 +1,45 @@
|
|||
#FIG 3.2
|
||||
Landscape
|
||||
Center
|
||||
Inches
|
||||
Letter
|
||||
100.00
|
||||
Single
|
||||
-2
|
||||
1200 2
|
||||
1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 4500 8700 21 21 4500 8700 4515 8715
|
||||
1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 6900 8100 21 21 6900 8100 6915 8115
|
||||
1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 6900 6600 21 21 6900 6600 6915 6615
|
||||
1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 5700 6000 21 21 5700 6000 5715 6015
|
||||
2 1 0 2 0 7 0 0 -1 0.000 0 0 -1 0 0 5
|
||||
1800 7200 4200 4800 9600 4800 7200 7200 1800 7200
|
||||
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
|
||||
4500 7200 6900 4800
|
||||
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
|
||||
3000 6000 8400 6000
|
||||
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2
|
||||
1 1 1.00 60.00 120.00
|
||||
5700 6000 5700 4200
|
||||
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2
|
||||
1 1 1.00 60.00 120.00
|
||||
5700 6000 6900 8100
|
||||
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2
|
||||
1 1 1.00 60.00 120.00
|
||||
5700 6000 6900 6600
|
||||
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 6600 6900 8100
|
||||
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2
|
||||
1 1 1.00 60.00 120.00
|
||||
4500 8700 5686 5994
|
||||
4 0 0 0 0 0 14 0.0000 4 105 105 6825 6450 v\001
|
||||
4 0 0 0 0 0 14 0.0000 4 195 645 6750 8325 S (Sun)\001
|
||||
4 0 0 0 0 0 14 0.0000 4 105 105 6975 7500 u\001
|
||||
4 0 0 0 0 0 10 0.0000 4 105 75 7080 7568 1\001
|
||||
4 0 0 0 0 0 14 0.0000 4 195 525 4200 8925 Origin\001
|
||||
4 0 0 0 0 0 14 0.0000 4 150 120 5475 5850 P\001
|
||||
4 0 0 0 0 0 10 0.0000 4 105 75 5550 5925 0\001
|
||||
4 0 0 0 0 0 14 0.0000 4 105 105 5625 6375 v\001
|
||||
4 0 0 0 0 0 10 0.0000 4 105 75 5700 6450 0\001
|
||||
4 0 0 0 0 0 14 0.0000 4 105 105 6450 7725 u\001
|
||||
4 0 0 0 0 0 14 0.0000 4 105 105 5625 4125 n\001
|
Loading…
Add table
Reference in a new issue