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