コード例 #1
0
TEST_F(ManœuvreTest, TargetΔv) {
    Instant const t0 = Instant();
    Vector<double, World> e_y({0, 1, 0});
    Manœuvre<World> manœuvre(1 * Newton /*thrust*/,
                               2 * Kilogram /*initial_mass*/,
                               1 * Newton * Second / Kilogram /*specific_impulse*/,
                               e_y /*direction*/);
    EXPECT_EQ(1 * Newton, manœuvre.thrust());
    EXPECT_EQ(2 * Kilogram, manœuvre.initial_mass());
    EXPECT_EQ(1 * Metre / Second, manœuvre.specific_impulse());
    EXPECT_EQ(e_y, manœuvre.direction());
    EXPECT_EQ(1 * Kilogram / Second, manœuvre.mass_flow());

    manœuvre.set_Δv(1 * Metre / Second);
    EXPECT_EQ(1 * Metre / Second, manœuvre.Δv());
    EXPECT_EQ((2 - 2 / e) * Second, manœuvre.duration());
    EXPECT_EQ((2 - 2 / Sqrt(e)) * Second, manœuvre.time_to_half_Δv());
    EXPECT_EQ((2 / e) * Kilogram, manœuvre.final_mass());

    manœuvre.set_time_of_half_Δv(t0);
    EXPECT_EQ(t0 - (2 - 2 / Sqrt(e)) * Second, manœuvre.initial_time());
    EXPECT_EQ(t0 + (2 / Sqrt(e) - 2 / e) * Second, manœuvre.final_time());
    EXPECT_EQ(t0, manœuvre.time_of_half_Δv());
    EXPECT_EQ(
        0 * Metre / Pow<2>(Second),
        manœuvre.acceleration()(manœuvre.initial_time() - 1 * Second).Norm());
    EXPECT_EQ(0.5 * Metre / Pow<2>(Second),
              manœuvre.acceleration()(manœuvre.initial_time()).Norm());
    EXPECT_EQ(Sqrt(e) / 2 * Metre / Pow<2>(Second),
              manœuvre.acceleration()(manœuvre.time_of_half_Δv()).Norm());
    EXPECT_EQ((e / 2) * Metre / Pow<2>(Second),
              manœuvre.acceleration()(manœuvre.final_time()).Norm());
    EXPECT_EQ(0 * Metre / Pow<2>(Second),
              manœuvre.acceleration()(manœuvre.final_time() + 1 * Second).Norm());
}
コード例 #2
0
NavigationManoeuvre principia__FlightPlanGetManoeuvre(
    Plugin const* const plugin,
    char const* const vessel_guid,
    int const index) {
  journal::Method<journal::FlightPlanGetManoeuvre> m({plugin,
                                                      vessel_guid,
                                                      index});
  CHECK_NOTNULL(plugin);
  return m.Return(ToInterfaceNavigationManoeuvre(
                      *plugin,
                      GetFlightPlan(*plugin, vessel_guid).GetManœuvre(index)));
}