All Classes Functions
OptimalVelSolver.hpp
1 // ==============================================================
2 // ORBITER MODULE: LaunchMFD
3 // Part of the ORBITER SDK
4 //
5 // Copyright (C) 2004 rjcroy - robust time based pitch autopilot (borrowed code)
6 // Copyright (C) 2004 Dave "Daver" Rowbotham - conversion of rjcroy's autopolot to C++ (borrowed code)
7 // Copyright (C) 2004 Erik H. "Sputnik" Anderson - conversion of the autopilot to energy based (borrowed code)
8 // Copyright (C) 2007 "Vanguard" - dressing up azimuth calcualtions into an MFD (author)
9 // Copyright (C) 2007 Pawel "She'da'Lier" Stiasny - yaw error visual representation (contributor)
10 // Copyright (C) 2008 Mohd "Computerex" Ali - borrowed his code (multiple vessels support) (borrowed code)
11 // Copyright (C) 2008 Chris "Kwan" Jeppesen - borrowed his code (peg guidance) (borrowed code)
12 // Copyright (C) 2008 Steve "agentgonzo" Arch - peg integration, offplane correction, compass, hud display (co-developer)
13 // Copyright (C) 2007-2012 Szymon "Enjo" Ender - everything else ;> (author and maintainer)
14 // All rights reserved
15 //
16 // Authors - Szymon "Enjo" Ender
17 //
18 // This module calculates the appropriate launch azimuth given
19 // desired orbital inclination and desired orbit altitude. This
20 // MFD takes the planets rotation into account, which provides a
21 // much more accurate azimuth. The calculations are performed
22 // 'on the fly' (technically and methaphorically), meaning that
23 // you get info about necessary course corrections.
24 //
25 // This file is part of LaunchMFD.
26 //
27 // LaunchMFD is free software: you can redistribute it and/or modify
28 // it under the terms of the GNU General Public License as published by
29 // the Free Software Foundation, either version 3 of the License, or
30 // (at your option) any later version.
31 //
32 // LaunchMFD is distributed in the hope that it will be useful,
33 // but WITHOUT ANY WARRANTY; without even the implied warranty of
34 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
35 // GNU General Public License for more details.
36 //
37 // You should have received a copy of the GNU General Public License
38 // along with LaunchMFD. If not, see <http://www.gnu.org/licenses/>.
39 // ==============================================================
40 
41 #ifndef OPTIMALVELSOLVER_HPP_INCLUDED
42 #define OPTIMALVELSOLVER_HPP_INCLUDED
43 
44 #include <vector>
45 
46 #include "../../BODYPHYS.h"
47 #include "SHIP_PARAMS.h"
48 #include "Systems/Point.hpp"
49 #include "OptimalVelSolverParams.hpp"
50 #include "VelIntegral.h"
51 
52 class CaVertParams;
53 
55 {
56  public:
58  OptimalVelSolver( const BODYPHYS & bodyPhysPar, const OptimalVelSolverParams & optVelPar, const SHIP_PARAMS & shipPar);
59  void SetParams( const BODYPHYS & bodyPhysPar, const OptimalVelSolverParams & optVelPar, const SHIP_PARAMS & shipPar );
60 
61  VelIntegral CalcIntegralFromVel( double vel, bool calcValuesOfFunctions = false );
62  double CalcAnglesDiff( const VelIntegral & base, const VelIntegral & left, const VelIntegral & right );
63  virtual VelIntegral FuelOptimIteration( double vel, bool acquireIntegralsFromFirst = false );
64  VelIntegral CalcFuelOptim( double parVel = 0.5, const int maxIter = 50, const double minDiff = 0.00005 );
65 
66  double GetTrueVelOrb();
67 
68  protected:
69  double GetDVAccEastAndHover( const CaVertParams & apar, double * tVert );
70 
72  SHIP_PARAMS m_shipPars;
73  BODYPHYS m_bodyPhys;
74 
75  std::vector <EnjoLib::Point> vGraphAccValues;
76  std::vector <EnjoLib::Point> vGraphEqualizingValues;
77 
78  double av_const;
79  double t_acc, t_const, t_final;
80  double m_angDiff;
81  int m_iter; // current iteration
82 
83  double test1;
84  double test2;
85 
86  private:
87 
88 
89 
90 };
91 
92 #endif // OPTIMALVELSOLVER_HPP_INCLUDED