1
1
package fr .sncf .osrd .envelope ;
2
2
3
3
import static fr .sncf .osrd .envelope_utils .DoubleUtils .clamp ;
4
+ import static java .lang .Math .max ;
5
+ import static java .lang .Math .min ;
4
6
5
7
import java .util .ArrayList ;
6
8
import java .util .List ;
@@ -158,9 +160,11 @@ public double maxSpeedInRange(double beginPos, double endPos) {
158
160
assert firstEnvelopeIndex != -1 : "Trying to interpolate time outside of the envelope" ;
159
161
var firstEnvelope = envelopes .get (firstEnvelopeIndex );
160
162
var beginSpeed = firstEnvelope .envelope .maxSpeedInRange (
161
- beginPos - firstEnvelope .startOffset , firstEnvelope .envelope .getEndPos ());
163
+ beginPos - firstEnvelope .startOffset ,
164
+ min (firstEnvelope .envelope .getEndPos (), endPos - firstEnvelope .startOffset ));
162
165
163
166
var lastEnvelopeIndex = findEnvelopeIndexAt (endPos , true );
167
+ if (lastEnvelopeIndex == firstEnvelopeIndex ) return beginSpeed ;
164
168
assert lastEnvelopeIndex != -1 : "Trying to interpolate time outside of the envelope" ;
165
169
var lastEnvelope = envelopes .get (lastEnvelopeIndex );
166
170
var endOffset = endPos - lastEnvelope .startOffset ;
@@ -169,14 +173,13 @@ public double maxSpeedInRange(double beginPos, double endPos) {
169
173
}
170
174
var endSpeed = lastEnvelope .envelope .maxSpeedInRange (0 , endOffset );
171
175
172
- var maxSpeed = beginSpeed ;
176
+ var maxSpeed = max ( beginSpeed , endSpeed ) ;
173
177
for (var i = firstEnvelopeIndex + 1 ; i < lastEnvelopeIndex ; i ++) {
174
178
var envelope = envelopes .get (i );
175
179
var speed = envelope .envelope .maxSpeedInRange (0 , envelope .envelope .getEndPos ());
176
180
if (speed > maxSpeed ) maxSpeed = speed ;
177
181
}
178
182
179
- if (endSpeed > maxSpeed ) maxSpeed = endSpeed ;
180
183
return maxSpeed ;
181
184
}
182
185
0 commit comments