Skip to content

Commit 78e98d2

Browse files
committed
core: fix max speed in concatenated envelopes
Signed-off-by: Eloi Charpentier <[email protected]>
1 parent cdb6f92 commit 78e98d2

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

core/envelope-sim/src/main/java/fr/sncf/osrd/envelope/EnvelopeConcat.java

+6-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package fr.sncf.osrd.envelope;
22

33
import static fr.sncf.osrd.envelope_utils.DoubleUtils.clamp;
4+
import static java.lang.Math.max;
5+
import static java.lang.Math.min;
46

57
import java.util.ArrayList;
68
import java.util.List;
@@ -158,9 +160,11 @@ public double maxSpeedInRange(double beginPos, double endPos) {
158160
assert firstEnvelopeIndex != -1 : "Trying to interpolate time outside of the envelope";
159161
var firstEnvelope = envelopes.get(firstEnvelopeIndex);
160162
var beginSpeed = firstEnvelope.envelope.maxSpeedInRange(
161-
beginPos - firstEnvelope.startOffset, firstEnvelope.envelope.getEndPos());
163+
beginPos - firstEnvelope.startOffset,
164+
min(firstEnvelope.envelope.getEndPos(), endPos - firstEnvelope.startOffset));
162165

163166
var lastEnvelopeIndex = findEnvelopeIndexAt(endPos, true);
167+
if (lastEnvelopeIndex == firstEnvelopeIndex) return beginSpeed;
164168
assert lastEnvelopeIndex != -1 : "Trying to interpolate time outside of the envelope";
165169
var lastEnvelope = envelopes.get(lastEnvelopeIndex);
166170
var endOffset = endPos - lastEnvelope.startOffset;
@@ -169,14 +173,13 @@ public double maxSpeedInRange(double beginPos, double endPos) {
169173
}
170174
var endSpeed = lastEnvelope.envelope.maxSpeedInRange(0, endOffset);
171175

172-
var maxSpeed = beginSpeed;
176+
var maxSpeed = max(beginSpeed, endSpeed);
173177
for (var i = firstEnvelopeIndex + 1; i < lastEnvelopeIndex; i++) {
174178
var envelope = envelopes.get(i);
175179
var speed = envelope.envelope.maxSpeedInRange(0, envelope.envelope.getEndPos());
176180
if (speed > maxSpeed) maxSpeed = speed;
177181
}
178182

179-
if (endSpeed > maxSpeed) maxSpeed = endSpeed;
180183
return maxSpeed;
181184
}
182185

0 commit comments

Comments
 (0)