4
4
5
5
#include " base/not_null.hpp"
6
6
#include " geometry/instant.hpp"
7
- #include " geometry/orthogonal_map.hpp"
8
7
#include " geometry/perspective.hpp"
9
8
#include " geometry/r3_element.hpp"
10
9
#include " geometry/rp2_point.hpp"
14
13
#include " physics/degrees_of_freedom.hpp"
15
14
#include " physics/discrete_trajectory.hpp"
16
15
#include " physics/ephemeris.hpp"
17
- #include " physics/rigid_motion.hpp"
18
16
#include " physics/trajectory.hpp"
19
17
#include " quantities/quantities.hpp"
20
18
@@ -25,7 +23,6 @@ namespace internal {
25
23
26
24
using namespace principia ::base::_not_null;
27
25
using namespace principia ::geometry::_instant;
28
- using namespace principia ::geometry::_orthogonal_map;
29
26
using namespace principia ::geometry::_perspective;
30
27
using namespace principia ::geometry::_r3_element;
31
28
using namespace principia ::geometry::_rp2_point;
@@ -35,7 +32,6 @@ using namespace principia::ksp_plugin::_frames;
35
32
using namespace principia ::physics::_degrees_of_freedom;
36
33
using namespace principia ::physics::_discrete_trajectory;
37
34
using namespace principia ::physics::_ephemeris;
38
- using namespace principia ::physics::_rigid_motion;
39
35
using namespace principia ::physics::_trajectory;
40
36
using namespace principia ::quantities::_quantities;
41
37
@@ -69,6 +65,7 @@ class Planetarium {
69
65
70
66
private:
71
67
double const sphere_radius_multiplier_;
68
+ Angle const angular_resolution_;
72
69
double const sin²_angular_resolution_;
73
70
double const tan_angular_resolution_;
74
71
double const tan_field_of_view_;
@@ -125,7 +122,8 @@ class Planetarium {
125
122
Length* minimal_distance = nullptr ) const ;
126
123
127
124
// A method similar to PlotMethod2, but which produces a three-dimensional
128
- // trajectory in scaled space instead of projecting and hiding.
125
+ // trajectory in scaled space instead of projecting and hiding. It uses the
126
+ // apparent angle of the sagitta as the metric to analyse curvature.
129
127
void PlotMethod3 (
130
128
Trajectory<Barycentric> const & trajectory,
131
129
DiscreteTrajectory<Barycentric>::iterator begin,
@@ -147,6 +145,29 @@ class Planetarium {
147
145
int max_points,
148
146
Length* minimal_distance = nullptr) const ;
149
147
148
+ // A method similar to PlotMethod4, but which uses the RMS of the apparent
149
+ // distance between the trajectory and line segments.
150
+ void PlotMethod4 (
151
+ Trajectory<Barycentric> const & trajectory,
152
+ DiscreteTrajectory<Barycentric>::iterator begin,
153
+ DiscreteTrajectory<Barycentric>::iterator end,
154
+ Instant const & t_max,
155
+ bool reverse,
156
+ std::function<void (ScaledSpacePoint const &)> const & add_point,
157
+ int max_points) const ;
158
+
159
+ // The same method, operating on the `Trajectory` interface for any frame that
160
+ // can be converted to `Navigation`.
161
+ template <typename Frame>
162
+ void PlotMethod4 (
163
+ Trajectory<Frame> const & trajectory,
164
+ Instant const & first_time,
165
+ Instant const & last_time,
166
+ bool reverse,
167
+ std::function<void (ScaledSpacePoint const &)> const & add_point,
168
+ int max_points,
169
+ Length* minimal_distance = nullptr) const ;
170
+
150
171
private:
151
172
// Computes the coordinates of the spheres that represent the `ephemeris_`
152
173
// bodies. These coordinates are in the `plotting_frame_` at time `now`.
@@ -160,6 +181,12 @@ class Planetarium {
160
181
DiscreteTrajectory<Barycentric>::iterator begin,
161
182
DiscreteTrajectory<Barycentric>::iterator end) const ;
162
183
184
+ // Computes the proper motion (in the astronomical sense) of the given point
185
+ // and velocity seen from a frame centered at the origin of `Camera`. This
186
+ // is a uniform rotation on a great circle.
187
+ AngularVelocity<Navigation> ProperMotion (
188
+ DegreesOfFreedom<Navigation> const & degrees_of_freedom) const ;
189
+
163
190
Parameters const parameters_;
164
191
Perspective<Navigation, Camera> const perspective_;
165
192
not_null<Ephemeris<Barycentric> const *> const ephemeris_;
0 commit comments