/// <summary> /// Provides the flat acceleration / speed curve for this graph /// </summary> /// <param name="expectedEnd">The expected end for the curve</param> /// <returns></returns> public FlatAccelerationSpeedCurve FlatAccelerationSpeedCurve(double expectedEnd) { FlatAccelerationSpeedCurve curve = new FlatAccelerationSpeedCurve(); double totalSegmentSize = 0; int segmentCount = 0; foreach (Segment segment in Segments) { double start = segment.Start; if (start <= expectedEnd) { double end = Math.Min(segment.End, expectedEnd); totalSegmentSize = totalSegmentSize + (end - start); segmentCount = segmentCount + 1; curve.Add( new SiSpeed(segment.Start, SiSpeed_SubUnits.KiloMeter_per_Hour), new SiSpeed(end, SiSpeed_SubUnits.KiloMeter_per_Hour), new SiAcceleration(-segment.Expression.v0, SiAcceleration_SubUnits.Meter_per_SecondSquare)); // decelerations are negative } } return(curve); }
/// <summary> /// Creates the surface for the Acceleration based on speed and distance (A(V,d)) /// </summary> /// <returns></returns> public AccelerationSpeedDistanceSurface createAccelerationSpeedDistanceSurface(double expectedEndX, double expectedEndY) { AccelerationSpeedDistanceSurface retVal = new AccelerationSpeedDistanceSurface(); foreach (Segment segment in Segments) { Graph graph = segment.Graph; FlatAccelerationSpeedCurve acc = graph.FlatAccelerationSpeedCurve(expectedEndY); for (int i = 0; i < acc.SegmentCount; i++) { double start = segment.Start; double end = segment.End; if (end == double.MaxValue) { end = expectedEndX; } ConstantCurveSegment <SiSpeed, SiAcceleration> seg = acc[i]; SurfaceTile tile = new SurfaceTile( new SiDistance(start, SiDistance_SubUnits.Meter), new SiDistance(end, SiDistance_SubUnits.Meter), seg.X.X0, seg.X.X1, seg.Y ); retVal.Tiles.Add(tile); } } return(retVal); }
public InputData() { AD_EB = new FlatAccelerationSpeedCurve(); AD_SB = new FlatAccelerationSpeedCurve(); }