Comments and using new Subtract method

feature/19
Daniel Warner 2011-04-09 20:03:58 +01:00
parent c2a7fbe2e1
commit e5c0a2bdc4
1 changed files with 29 additions and 21 deletions

View File

@ -6,16 +6,18 @@
* in degrees! * in degrees!
*/ */
Observer::Observer(const double latitude, const double longitude, const double altitude) { Observer::Observer(const double latitude, const double longitude, const double altitude) {
geo_.SetLatitude(Globals::Deg2Rad(latitude)); geo_.SetLatitude(Globals::Deg2Rad(latitude));
geo_.SetLongitude(Globals::Deg2Rad(longitude)); geo_.SetLongitude(Globals::Deg2Rad(longitude));
geo_.SetAltitude(altitude); geo_.SetAltitude(altitude);
observers_eci_ = Eci(Julian(), geo_); UpdateObserversEci(Julian());
} }
Observer::Observer(const CoordGeodetic &geo) Observer::Observer(const CoordGeodetic &geo)
: geo_(geo), observers_eci_(Julian(), geo) { : geo_(geo) {
UpdateObserversEci(Julian());
} }
Observer::~Observer(void) { Observer::~Observer(void) {
@ -28,28 +30,28 @@ void Observer::UpdateObserversEci(const Julian &date) {
} }
} }
/*
* calculate lookangle between the observer and the passed in Eci object
*/
CoordTopographic Observer::GetLookAngle(const Eci &eci) { CoordTopographic Observer::GetLookAngle(const Eci &eci) {
Julian date = eci.GetDate(); /*
* update the observers Eci to match the time of the Eci passed in
*/
UpdateObserversEci(eci.GetDate());
/* /*
* update observers eci value if the date is different to the eci passed in * calculate differences
*/ */
UpdateObserversEci(date); Vector range_rate = eci.GetVelocity().Subtract(observers_eci_.GetVelocity());
Vector range = eci.GetPosition().Subtract(observers_eci_.GetPosition());
Vector range_rate(eci.GetVelocity().GetX() - observers_eci_.GetVelocity().GetX(), range.SetW(range.GetMagnitude());
eci.GetVelocity().GetY() - observers_eci_.GetVelocity().GetY(),
eci.GetVelocity().GetZ() - observers_eci_.GetVelocity().GetZ());
const double x = eci.GetPosition().GetX() - observers_eci_.GetPosition().GetX(); /*
const double y = eci.GetPosition().GetY() - observers_eci_.GetPosition().GetY(); * Calculate Local Mean Sidereal Time for observers longitude
const double z = eci.GetPosition().GetZ() - observers_eci_.GetPosition().GetZ(); */
const double w = sqrt(pow(x, 2.0) + pow(y, 2.0) + pow(z, 2.0)); double theta = eci.GetDate().ToLocalMeanSiderealTime(geo_.GetLongitude());
Vector range(x, y, z, w);
// The site's Local Mean Sidereal Time at the time of interest.
double theta = date.ToLocalMeanSiderealTime(geo_.GetLongitude());
double sin_lat = sin(geo_.GetLatitude()); double sin_lat = sin(geo_.GetLatitude());
double cos_lat = cos(geo_.GetLatitude()); double cos_lat = cos(geo_.GetLatitude());
@ -77,10 +79,16 @@ CoordTopographic Observer::GetLookAngle(const Eci &eci) {
range.GetY() * range_rate.GetY() + range.GetY() * range_rate.GetY() +
range.GetZ() * range_rate.GetZ()) / range.GetW(); range.GetZ() * range_rate.GetZ()) / range.GetW();
CoordTopographic topo(az, // azimuth, radians /*
el, // elevation, radians * azimuth in radians
range.GetW(), // range, km * elevation in radians
rate); // rate, km / sec * range in km
* range rate in km/s
*/
CoordTopographic topo(az,
el,
range.GetW(),
rate);
return topo; return topo;
} }