sample method

ResolvedPathSample sample(
  1. double fraction
)

Fraction means distance along the route, independent of sampling density.

Implementation

ResolvedPathSample sample(double fraction) {
  if (!fraction.isFinite || fraction < 0 || fraction > 1) {
    throw RangeError.range(fraction, 0, 1, 'fraction');
  }
  if (points.length == 1) {
    return ResolvedPathSample(
      position: points.single,
      tangent: DiagramPoint.zero,
      fraction: fraction,
    );
  }
  if (fraction == 1) {
    final delta = points.last - points[points.length - 2];
    return ResolvedPathSample(
      position: points.last,
      tangent: delta * (1 / delta.magnitude),
      fraction: fraction,
    );
  }
  final distance = fraction * length;
  var low = 1;
  var high = points.length - 1;
  while (low < high) {
    final middle = (low + high) ~/ 2;
    if (_distances[middle] < distance) {
      low = middle + 1;
    } else {
      high = middle;
    }
  }
  final start = points[low - 1];
  final delta = points[low] - start;
  final segmentLength = _distances[low] - _distances[low - 1];
  return ResolvedPathSample(
    position:
        start + delta * ((distance - _distances[low - 1]) / segmentLength),
    tangent: delta * (1 / segmentLength),
    fraction: fraction,
  );
}