Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Convert Renderer and its test to DiscreteTraject0ry #3190

Merged
merged 2 commits into from
Nov 4, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 21 additions & 21 deletions ksp_plugin/renderer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -74,52 +74,52 @@ Vessel const& Renderer::GetTargetVessel() const {
return *target_->vessel;
}

not_null<std::unique_ptr<DiscreteTrajectory<World>>>
DiscreteTraject0ry<World>
Renderer::RenderBarycentricTrajectoryInWorld(
Instant const& time,
DiscreteTrajectory<Barycentric>::Iterator const& begin,
DiscreteTrajectory<Barycentric>::Iterator const& end,
DiscreteTraject0ry<Barycentric>::iterator const& begin,
DiscreteTraject0ry<Barycentric>::iterator const& end,
Position<World> const& sun_world_position,
Rotation<Barycentric, AliceSun> const& planetarium_rotation) const {
auto const trajectory_in_plotting_frame =
RenderBarycentricTrajectoryInPlotting(begin, end);
auto trajectory_in_world =
RenderPlottingTrajectoryInWorld(time,
trajectory_in_plotting_frame->begin(),
trajectory_in_plotting_frame->end(),
trajectory_in_plotting_frame.begin(),
trajectory_in_plotting_frame.end(),
sun_world_position,
planetarium_rotation);
return trajectory_in_world;
}

not_null<std::unique_ptr<DiscreteTrajectory<Navigation>>>
DiscreteTraject0ry<Navigation>
Renderer::RenderBarycentricTrajectoryInPlotting(
DiscreteTrajectory<Barycentric>::Iterator const& begin,
DiscreteTrajectory<Barycentric>::Iterator const& end) const {
auto trajectory = make_not_null_unique<DiscreteTrajectory<Navigation>>();
DiscreteTraject0ry<Barycentric>::iterator const& begin,
DiscreteTraject0ry<Barycentric>::iterator const& end) const {
DiscreteTraject0ry<Navigation> trajectory;
for (auto it = begin; it != end; ++it) {
auto const& [time, degrees_of_freedom] = *it;
if (target_) {
auto const& prediction = target_->vessel->prediction();
if (time < prediction.t_min()) {
auto const prediction = target_->vessel->prediction();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not auto const& prediction = *target_->vessel->prediction();?

Copy link
Member Author

@pleroy pleroy Nov 3, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It really doesn't matter here, but I have tried to stay away from operating on segments directly, going through (segment) iterators instead.

if (time < prediction->t_min()) {
continue;
} else if (time > prediction.t_max()) {
} else if (time > prediction->t_max()) {
break;
}
}
trajectory->Append(time, BarycentricToPlotting(time)(degrees_of_freedom));
trajectory.Append(time, BarycentricToPlotting(time)(degrees_of_freedom));
}
return trajectory;
}

not_null<std::unique_ptr<DiscreteTrajectory<World>>>
DiscreteTraject0ry<World>
Renderer::RenderPlottingTrajectoryInWorld(
Instant const& time,
DiscreteTrajectory<Navigation>::Iterator const& begin,
DiscreteTrajectory<Navigation>::Iterator const& end,
DiscreteTraject0ry<Navigation>::iterator const& begin,
DiscreteTraject0ry<Navigation>::iterator const& end,
Position<World> const& sun_world_position,
Rotation<Barycentric, AliceSun> const& planetarium_rotation) const {
auto trajectory = make_not_null_unique<DiscreteTrajectory<World>>();
DiscreteTraject0ry<World> trajectory;

// Dinanzi a me non fuor cose create
// se non etterne, e io etterno duro.
Expand Down Expand Up @@ -160,7 +160,7 @@ Renderer::RenderPlottingTrajectoryInWorld(
geometry::Permutation<Navigation,
World>::CoordinatePermutation::YXZ)(
navigation_degrees_of_freedom.velocity())};
trajectory->Append(time, world_degrees_of_freedom);
trajectory.Append(time, world_degrees_of_freedom);
}
return trajectory;
}
Expand Down Expand Up @@ -205,7 +205,7 @@ OrthogonalMap<Frenet<Navigation>, World> Renderer::FrenetToWorld(
OrthogonalMap<Frenet<Navigation>, World> Renderer::FrenetToWorld(
Vessel const& vessel,
Rotation<Barycentric, AliceSun> const& planetarium_rotation) const {
auto const back = vessel.psychohistory().back();
auto const back = vessel.psychohistory()->back();
DegreesOfFreedom<Barycentric> const& barycentric_degrees_of_freedom =
back.degrees_of_freedom;
DegreesOfFreedom<Navigation> const plotting_frame_degrees_of_freedom =
Expand All @@ -224,7 +224,7 @@ OrthogonalMap<Frenet<Navigation>, World> Renderer::FrenetToWorld(
Vessel const& vessel,
NavigationFrame const& navigation_frame,
Rotation<Barycentric, AliceSun> const& planetarium_rotation) const {
auto const back = vessel.psychohistory().back();
auto const back = vessel.psychohistory()->back();
auto const to_navigation = navigation_frame.ToThisFrameAtTime(back.time);
auto const from_navigation = to_navigation.orthogonal_map().Inverse();
auto const frenet_frame =
Expand Down Expand Up @@ -315,7 +315,7 @@ Renderer::Target::Target(
make_not_null_unique<
BodyCentredBodyDirectionDynamicFrame<Barycentric, Navigation>>(
ephemeris,
[this]() -> auto& { return this->vessel->prediction(); },
[this]() -> auto& { return *this->vessel->prediction(); },
celestial->body())) {}

} // namespace internal_renderer
Expand Down
22 changes: 11 additions & 11 deletions ksp_plugin/renderer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
#include "ksp_plugin/celestial.hpp"
#include "ksp_plugin/frames.hpp"
#include "ksp_plugin/vessel.hpp"
#include "physics/discrete_trajectory.hpp"
#include "physics/discrete_traject0ry.hpp"
#include "physics/dynamic_frame.hpp"
#include "physics/ephemeris.hpp"
#include "physics/rigid_motion.hpp"
Expand All @@ -29,7 +29,7 @@ using geometry::OrthogonalMap;
using geometry::Position;
using geometry::RigidTransformation;
using geometry::Rotation;
using physics::DiscreteTrajectory;
using physics::DiscreteTraject0ry;
using physics::Ephemeris;
using physics::Frenet;
using physics::RigidMotion;
Expand Down Expand Up @@ -72,29 +72,29 @@ class Renderer {
// and others in this class, |sun_world_position| is the current position of
// the sun in |World| space as returned by |Planetarium.fetch.Sun.position|;
// it is used to define the relation between |WorldSun| and |World|.
virtual not_null<std::unique_ptr<DiscreteTrajectory<World>>>
virtual DiscreteTraject0ry<World>
RenderBarycentricTrajectoryInWorld(
Instant const& time,
DiscreteTrajectory<Barycentric>::Iterator const& begin,
DiscreteTrajectory<Barycentric>::Iterator const& end,
DiscreteTraject0ry<Barycentric>::iterator const& begin,
DiscreteTraject0ry<Barycentric>::iterator const& end,
Position<World> const& sun_world_position,
Rotation<Barycentric, AliceSun> const& planetarium_rotation) const;

// Returns a trajectory in the current plotting frame corresponding to the
// trajectory defined by |begin| and |end|. If there is a target vessel, its
// prediction must not be empty.
virtual not_null<std::unique_ptr<DiscreteTrajectory<Navigation>>>
virtual DiscreteTraject0ry<Navigation>
RenderBarycentricTrajectoryInPlotting(
DiscreteTrajectory<Barycentric>::Iterator const& begin,
DiscreteTrajectory<Barycentric>::Iterator const& end) const;
DiscreteTraject0ry<Barycentric>::iterator const& begin,
DiscreteTraject0ry<Barycentric>::iterator const& end) const;

// Returns a trajectory in |World| corresponding to the trajectory defined by
// |begin| and |end| in the current plotting frame.
virtual not_null<std::unique_ptr<DiscreteTrajectory<World>>>
virtual DiscreteTraject0ry<World>
RenderPlottingTrajectoryInWorld(
Instant const& time,
DiscreteTrajectory<Navigation>::Iterator const& begin,
DiscreteTrajectory<Navigation>::Iterator const& end,
DiscreteTraject0ry<Navigation>::iterator const& begin,
DiscreteTraject0ry<Navigation>::iterator const& end,
Position<World> const& sun_world_position,
Rotation<Barycentric, AliceSun> const& planetarium_rotation) const;

Expand Down
4 changes: 2 additions & 2 deletions ksp_plugin_test/mock_vessel.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,11 @@ class MockVessel : public Vessel {
(not_null<Celestial const*> parent),
(override));

MOCK_METHOD(DiscreteTrajectory<Barycentric> const&,
MOCK_METHOD(DiscreteTrajectorySegmentIterator<Barycentric>,
psychohistory,
(),
(const, override));
MOCK_METHOD(DiscreteTrajectory<Barycentric> const&,
MOCK_METHOD(DiscreteTrajectorySegmentIterator<Barycentric>,
prediction,
(),
(const, override));
Expand Down
Loading