Pioneer
Loading...
Searching...
No Matches
Orbit.h
Go to the documentation of this file.
1// Copyright © 2008-2023 Pioneer Developers. See AUTHORS.txt for details
2// Licensed under the terms of the GPL v3. See licenses/GPL-3.txt
3
4#ifndef ORBIT_H
5#define ORBIT_H
6
7#include "libs.h"
8#include "matrix3x3.h"
9#include "vector3.h"
10
11class Orbit {
12public:
13 // utility functions for simple calculations
14 static double OrbitalPeriod(double semiMajorAxis, double centralMass);
15 static double OrbitalPeriodTwoBody(double semiMajorAxis, double totalMass, double bodyMass);
16
17 // note: the resulting Orbit is at the given position at t=0
18 static Orbit FromBodyState(const vector3d &position, const vector3d &velocity, double central_mass);
19 static Orbit ForStaticBody(const vector3d &position);
20
22 m_eccentricity(0.0),
23 m_semiMajorAxis(0.0),
24 m_orbitalPhaseAtStart(0.0),
25 m_velocityAreaPerSecond(0.0),
26 m_orient(matrix3x3d::Identity())
27 {}
28
29 void SetShapeAroundBarycentre(double semiMajorAxis, double totalMass, double bodyMass, double eccentricity);
30 void SetShapeAroundPrimary(double semiMajorAxis, double totalMass, double eccentricity);
31 void SetPlane(const matrix3x3d &orient)
32 {
33 m_orient = orient;
34 assert(!std::isnan(m_orient[0]) && !std::isnan(m_orient[1]) && !std::isnan(m_orient[2]));
35 assert(!std::isnan(m_orient[3]) && !std::isnan(m_orient[4]) && !std::isnan(m_orient[5]));
36 assert(!std::isnan(m_orient[6]) && !std::isnan(m_orient[7]) && !std::isnan(m_orient[8]));
37 }
38 void SetPhase(double orbitalPhaseAtStart) { m_orbitalPhaseAtStart = orbitalPhaseAtStart; }
39
40 vector3d OrbitalPosAtTime(double t) const;
41 double OrbitalTimeAtPos(const vector3d &pos, double centralMass) const;
42 vector3d OrbitalVelocityAtTime(double totalMass, double t) const;
43
44 // 0.0 <= t <= 1.0. Not for finding orbital pos
45 vector3d EvenSpacedPosTrajectory(double t, double timeOffset = 0) const;
46
47 double Period() const;
48 vector3d Apogeum() const;
49 vector3d Perigeum() const;
50
51 // basic accessors
52 double GetEccentricity() const { return m_eccentricity; }
53 double GetSemiMajorAxis() const { return m_semiMajorAxis; }
54 double GetOrbitalPhaseAtStart() const { return m_orbitalPhaseAtStart; }
55 const matrix3x3d &GetPlane() const { return m_orient; }
56
57private:
58 double TrueAnomalyFromMeanAnomaly(double MeanAnomaly) const;
59 double MeanAnomalyFromTrueAnomaly(double trueAnomaly) const;
60 double MeanAnomalyAtTime(double time) const;
61
62 vector3d m_positionForStaticBody;
63 double m_eccentricity;
64 double m_semiMajorAxis;
65 double m_orbitalPhaseAtStart; // 0 to 2 pi radians
66 /* dup " " --------------------------------------- */
67 double m_velocityAreaPerSecond; // seconds
68 matrix3x3d m_orient;
69};
70
71#endif
Definition Orbit.h:11
static double OrbitalPeriodTwoBody(double semiMajorAxis, double totalMass, double bodyMass)
Definition Orbit.cpp:17
double OrbitalTimeAtPos(const vector3d &pos, double centralMass) const
Definition Orbit.cpp:175
const matrix3x3d & GetPlane() const
Definition Orbit.h:55
Orbit()
Definition Orbit.h:21
static Orbit ForStaticBody(const vector3d &position)
Definition Orbit.cpp:302
vector3d Perigeum() const
Definition Orbit.cpp:279
double Period() const
Definition Orbit.cpp:260
vector3d OrbitalVelocityAtTime(double totalMass, double t) const
Definition Orbit.cpp:214
double GetOrbitalPhaseAtStart() const
Definition Orbit.h:54
vector3d EvenSpacedPosTrajectory(double t, double timeOffset=0) const
Definition Orbit.cpp:234
vector3d Apogeum() const
Definition Orbit.cpp:270
void SetPhase(double orbitalPhaseAtStart)
Definition Orbit.h:38
vector3d OrbitalPosAtTime(double t) const
Definition Orbit.cpp:167
void SetShapeAroundBarycentre(double semiMajorAxis, double totalMass, double bodyMass, double eccentricity)
Definition Orbit.cpp:288
void SetShapeAroundPrimary(double semiMajorAxis, double totalMass, double eccentricity)
Definition Orbit.cpp:295
static Orbit FromBodyState(const vector3d &position, const vector3d &velocity, double central_mass)
Definition Orbit.cpp:310
double GetEccentricity() const
Definition Orbit.h:52
double GetSemiMajorAxis() const
Definition Orbit.h:53
void SetPlane(const matrix3x3d &orient)
Definition Orbit.h:31
static double OrbitalPeriod(double semiMajorAxis, double centralMass)
Definition Orbit.cpp:12