@@ -9,7 +9,10 @@ import fr.sncf.osrd.envelope.part.constraints.EnvelopeConstraint
99import fr.sncf.osrd.envelope.part.constraints.EnvelopePartConstraintType
1010import fr.sncf.osrd.envelope.part.constraints.PositionConstraint
1111import fr.sncf.osrd.envelope.part.constraints.SpeedConstraint
12- import fr.sncf.osrd.envelope_sim.*
12+ import fr.sncf.osrd.envelope_sim.EnvelopeProfile
13+ import fr.sncf.osrd.envelope_sim.EnvelopeSimContext
14+ import fr.sncf.osrd.envelope_sim.PhysicsRollingStock
15+ import fr.sncf.osrd.envelope_sim.TrainPhysicsIntegrator
1316import fr.sncf.osrd.envelope_sim.etcs.BrakingType.*
1417import fr.sncf.osrd.envelope_sim.overlays.EnvelopeDeceleration
1518import java.util.*
@@ -573,17 +576,22 @@ private fun getIndexOfLastPointBeneathOverlay(
573576 speeds : List <Double >,
574577 overlay : Envelope
575578): Int {
576- var lastIndex = positions.size - 1
577- while (
578- lastIndex >= 0 &&
579- speeds[lastIndex] >
579+ if (positions.first() > overlay.endPos || positions.last() < overlay.beginPos) {
580+ return - 1
581+ }
582+ for (index in positions.size - 1 downTo 0 ) {
583+ if (positions[index] > overlay.endPos) continue // ignore positions after overlay
584+ if (positions[index] < overlay.beginPos) break // stop if reached positions before overlay
585+ if (
586+ speeds[index] <=
580587 overlay
581- .get(overlay.findRightDir(positions[lastIndex], - 1.0 ))
582- .interpolateSpeed(positions[lastIndex])
583- ) {
584- lastIndex--
588+ .get(overlay.findRightDir(positions[index], - 1.0 ))
589+ .interpolateSpeed(positions[index])
590+ ) {
591+ return index
592+ }
585593 }
586- return lastIndex
594+ return - 1
587595}
588596
589597private data class BecParams (val dBec : Double , val vBec : Double , val speed : Double ) {
0 commit comments