diff --git a/physics/discrete_trajectory_body.hpp b/physics/discrete_trajectory_body.hpp
index 190cd7a757..fb387aac9d 100644
--- a/physics/discrete_trajectory_body.hpp
+++ b/physics/discrete_trajectory_body.hpp
@@ -429,11 +429,21 @@ void DiscreteTrajectory::Merge(DiscreteTrajectory trajectory) {
template
Instant DiscreteTrajectory::t_min() const {
- return segments_->front().t_min();
+ if (empty()) {
+ return InfiniteFuture;
+ }
+ for (auto sit = segments_->begin();; ++sit) {
+ if (!sit->empty()) {
+ return sit->t_min();
+ }
+ }
}
template
Instant DiscreteTrajectory::t_max() const {
+ if (empty()) {
+ return InfinitePast;
+ }
return segments_->back().t_max();
}
diff --git a/physics/discrete_trajectory_test.cpp b/physics/discrete_trajectory_test.cpp
index 0b99ba2bb6..05c92639d6 100644
--- a/physics/discrete_trajectory_test.cpp
+++ b/physics/discrete_trajectory_test.cpp
@@ -32,6 +32,7 @@ using geometry::Displacement;
using geometry::Frame;
using geometry::Handedness;
using geometry::Inertial;
+using geometry::InfiniteFuture;
using geometry::Instant;
using geometry::Velocity;
using quantities::AngularFrequency;
@@ -523,16 +524,19 @@ TEST_F(DiscreteTrajectoryTest, ForgetBefore) {
EXPECT_EQ(3, trajectory.segments().size());
EXPECT_EQ(t0_ + 3 * Second, trajectory.begin()->time);
EXPECT_EQ(t0_ + 14 * Second, trajectory.rbegin()->time);
+ EXPECT_EQ(t0_ + 3 * Second, trajectory.t_min());
trajectory.ForgetBefore(t0_ + 6.1 * Second);
EXPECT_EQ(3, trajectory.segments().size());
EXPECT_EQ(t0_ + 7 * Second, trajectory.begin()->time);
EXPECT_EQ(t0_ + 14 * Second, trajectory.rbegin()->time);
+ EXPECT_EQ(t0_ + 7 * Second, trajectory.t_min());
trajectory.ForgetBefore(t0_ + 9 * Second);
EXPECT_EQ(3, trajectory.segments().size());
EXPECT_EQ(t0_ + 9 * Second, trajectory.begin()->time);
EXPECT_EQ(t0_ + 14 * Second, trajectory.rbegin()->time);
+ EXPECT_EQ(t0_ + 9 * Second, trajectory.t_min());
// The trajectory now has empty segments, so let's check that we can properly
// iterate over those.
@@ -565,9 +569,11 @@ TEST_F(DiscreteTrajectoryTest, ForgetBefore) {
trajectory.ForgetBefore(t0_ + 99 * Second);
EXPECT_TRUE(trajectory.empty());
+ EXPECT_EQ(InfiniteFuture, trajectory.t_min());
trajectory.ForgetBefore(trajectory.end());
EXPECT_TRUE(trajectory.empty());
+ EXPECT_EQ(InfiniteFuture, trajectory.t_min());
}
TEST_F(DiscreteTrajectoryTest, Merge) {