Skip to content

Commit

Permalink
core: fix max speed in concatenated envelopes
Browse files Browse the repository at this point in the history
Signed-off-by: Eloi Charpentier <[email protected]>
  • Loading branch information
eckter committed Jan 9, 2025
1 parent cdb6f92 commit 78e98d2
Showing 1 changed file with 6 additions and 3 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package fr.sncf.osrd.envelope;

import static fr.sncf.osrd.envelope_utils.DoubleUtils.clamp;
import static java.lang.Math.max;
import static java.lang.Math.min;

import java.util.ArrayList;
import java.util.List;
Expand Down Expand Up @@ -158,9 +160,11 @@ public double maxSpeedInRange(double beginPos, double endPos) {
assert firstEnvelopeIndex != -1 : "Trying to interpolate time outside of the envelope";
var firstEnvelope = envelopes.get(firstEnvelopeIndex);
var beginSpeed = firstEnvelope.envelope.maxSpeedInRange(
beginPos - firstEnvelope.startOffset, firstEnvelope.envelope.getEndPos());
beginPos - firstEnvelope.startOffset,
min(firstEnvelope.envelope.getEndPos(), endPos - firstEnvelope.startOffset));

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

var maxSpeed = beginSpeed;
var maxSpeed = max(beginSpeed, endSpeed);
for (var i = firstEnvelopeIndex + 1; i < lastEnvelopeIndex; i++) {
var envelope = envelopes.get(i);
var speed = envelope.envelope.maxSpeedInRange(0, envelope.envelope.getEndPos());
if (speed > maxSpeed) maxSpeed = speed;
}

if (endSpeed > maxSpeed) maxSpeed = endSpeed;
return maxSpeed;
}

Expand Down

0 comments on commit 78e98d2

Please sign in to comment.