00001 ////////////////////////////////////////////////////////////////////////////////////////////////// 00002 /*! \file OrbitFrameNTW.h 00003 * \brief Interface to the NTW Satellite Coordinate System Class. 00004 * \author $Author: cakinli $ 00005 * \version $Revision: 1.1.1.1 $ 00006 * \date $Date: 2005/04/26 17:40:59 $ 00007 *////////////////////////////////////////////////////////////////////////////////////////////////// 00008 /* 00009 * 00010 */ 00011 ////////////////////////////////////////////////////////////////////////////////////////////////// 00012 00013 #ifndef __SSF_ORBIT_FRAME_NTW_H__ 00014 #define __SSF_ORBIT_FRAME_NTW_H__ 00015 #include "OrbitFrame.h" 00016 00017 /*! \brief NTW Satellite Coordinate System 00018 * 00019 * Detailed Description. The primary axis lies in the orbital plane, normal to the velocity 00020 * vector. The T axis is tangential to the orbit, and the W axis is normal to the orbital plane. 00021 * In-track: deviations along the T axis. 00022 * Used mainly to analyze drag effects on the orbit because drag always acts along the velocity 00023 * vector. Also referred to as the Frenet System. (Vallado, pg. 43-44) 00024 */ 00025 class OrbitFrameNTW : public OrbitFrame 00026 { 00027 /*! \brief Constructor 00028 * @param _LongAscNode Longitude of the Ascending Node (rad) 00029 * @param _Inclination Inclination (rad) 00030 * @param _ArgPerigee Argument of Perigee (rad) 00031 * @param _ArgLatitude Argument of Latitude (rad) 00032 */ 00033 OrbitFrameNTW(const double &_LongAscNode, const double &_Inclination, const double &_ArgPerigee, const double &_ArgLatitude); 00034 00035 /*! \brief Deconstructor */ 00036 virtual ~OrbitFrameNTW(); 00037 00038 /*! \brief Return the rotation \f$R^{NTW-IJK}\f$ 00039 * \f${\bf r}_{IJK} = R_{3}(-\Omega)R_{1}(-i)R_{3}(-u)R_{3}(-\phi_{fpa}){\bf r}_{NTW}\f$ 00040 * @return rotation from NTW to IJK 00041 */ 00042 Rotation GetRotation2IJK() const; 00043 00044 /*! \brief Return the rotation \f$R^{IJK-NTW}\f$ 00045 * \f${\bf r}_{NTW} = R_{3}(\phi_{fpa})R_{3}(u)R_{1}(i)R_{3}(\Omega){\bf r}_{IJK}\f$ 00046 * @return rotation from IJK to NTW 00047 */ 00048 Rotation GetRotationFromIJK() const; 00049 00050 OrbitFrameNTW* NewPointer(); 00051 OrbitFrameNTW* Clone(); 00052 protected: 00053 00054 private: 00055 00056 }; 00057 inline OrbitFrameNTW::OrbitFrameNTW(const double &_LongAscNode, const double &_Inclination, const double &_ArgPerigee, const double &_ArgLatitude): OrbitFrame(R3(-_LongAscNode)*R1(-_Inclination)*R3(-_ArgPerigee)*R3(-_ArgLatitude)) {}; 00058 inline OrbitFrameNTW::~OrbitFrameNTW() {}; 00059 00060 inline Rotation OrbitFrameNTW::GetRotation2IJK() const {return m_Transformation2IJK;}; 00061 inline Rotation OrbitFrameNTW::GetRotationFromIJK() const {return ~m_Transformation2IJK;}; 00062 inline OrbitFrameNTW* OrbitFrameNTW::NewPointer() { return new OrbitFrameNTW(); } 00063 inline OrbitFrameNTW* OrbitFrameNTW::Clone() { return new OrbitFrameNTW(*this); } 00064 #endif 00065 00066 // Do not change the comments below - they will be added automatically by CVS 00067 /***************************************************************************** 00068 * $Log: OrbitFrameNTW.h,v $ 00069 * Revision 1.1.1.1 2005/04/26 17:40:59 cakinli 00070 * Adding OpenSESSAME to DSACSS distrib to capture fixed version. 00071 * 00072 * Revision 1.6 2003/04/29 20:17:39 nilspace 00073 * Added NewPointer() and Clone() functions. 00074 * 00075 * Revision 1.5 2003/04/29 18:45:35 nilspace 00076 * Moved all function definitions out of class interface definition. 00077 * 00078 * Revision 1.4 2003/04/24 20:05:55 nilspace 00079 * Made GetRotation functions const. 00080 * 00081 * Revision 1.3 2003/04/23 16:26:06 nilspace 00082 * Updated directory structure & default parameters. 00083 * 00084 * Revision 1.2 2003/04/22 17:37:25 nilspace 00085 * Added reference frames. 00086 * 00087 * Revision 1.1 2003/04/08 22:48:04 nilspace 00088 * Initial Submission. 00089 * 00090 * 00091 ******************************************************************************/