00001
00002
00008
00009
00010
00011
00013
00014 #ifndef __ENVIRONMENT_H__
00015 #define __ENVIRONMENT_H__
00016
00017 #include "Rotation.h"
00018 #include "Integrator.h"
00019 #include "Matrix.h"
00020 #include "Time.h"
00021 #include <set>
00022 #include <vector>
00023
00024 using namespace std;
00025
00026 namespace O_SESSAME {
00027 class CentralBody;
00028
00030
00045 typedef vector<void*> EnvFuncParamaterType;
00047 typedef Vector(*pt2EnvFunc)(const ssfTime &_currentTime, const OrbitState &_currentOrbitState, const AttitudeState &_currentAttitudeState, const EnvFuncParamaterType &_parameterList);
00048
00106 class EnvFunction
00107 {
00108 public:
00109 EnvFunction(pt2EnvFunc _EnvFuncPtr);
00110
00111 EnvFunction(pt2EnvFunc _EnvFuncPtr, const int & _numParameters);
00112
00113 Vector Evaluate(const ssfTime &_currentTime, const OrbitState &_currentOrbitState, const AttitudeState &_currentAttitudeState);
00114
00115 void AddParameter(void* _parameter, int _paramNumber = -1);
00116
00117 void RemoveParameter(int _paramNumber = -1);
00118
00119 void ChangeParameter(void* _parameter, int _paramNumber = -1);
00120 private:
00122 pt2EnvFunc m_EnvFuncPtr;
00124 int m_NumParameters;
00126 EnvFuncParamaterType m_EnvFuncParameters;
00127
00128 };
00129
00131
00141
00142
00179 class Environment
00180 {
00181 public:
00182 Environment();
00183
00184 virtual ~Environment();
00185
00186 Vector GetTorques(const ssfTime& _currentTime, const OrbitState& _currentOrbitState, const AttitudeState& _currentAttitudeState);
00187
00188 Vector GetForces(const ssfTime& _currentTime, const OrbitState& _currentOrbitState, const AttitudeState& _currentAttitudeState);
00189
00190 void AddForceFunction(const EnvFunction &_forceFunc);
00191
00192 void AddTorqueFunction(const EnvFunction &_torqueFunc);
00193
00194 const Functor& GetForceFunction() const;
00195
00196 const Functor& GetTorqueFunction() const;
00197
00198 void SetCentralBody(CentralBody *_pCB);
00199
00200 const CentralBody* GetCentralBody() const;
00201
00202 private:
00204 vector<EnvFunction> m_ForceFunctions;
00206 vector<EnvFunction> m_TorqueFunctions;
00208 vector<EnvFunction>::iterator m_funcIterator;
00210 CentralBody *m_pCB;
00211
00213 Vector m_CalculatedForces;
00215 Vector m_CalculatedTorques;
00217 ObjectFunctor<Environment> m_ForcesFunctor;
00219 ObjectFunctor<Environment> m_TorquesFunctor;
00220
00221
00222 };
00223 }
00224 #endif
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266