parameterAtDistance method

double parameterAtDistance(
  1. double d
)

The natural parameter at arc-length distance d (clamped to 0..length).

Implementation

double parameterAtDistance(double d) {
  final table = _baked;
  final cumulative = table.cumulativeLengths;
  final total = cumulative.last;
  if (total <= 0.0) return 0.0;
  final target = d < 0.0 ? 0.0 : (d > total ? total : d);
  var lo = 0;
  var hi = cumulative.length - 1;
  while (lo + 1 < hi) {
    final mid = (lo + hi) >> 1;
    if (cumulative[mid] <= target) {
      lo = mid;
    } else {
      hi = mid;
    }
  }
  final segment = cumulative[hi] - cumulative[lo];
  final local = segment > 1e-12 ? (target - cumulative[lo]) / segment : 0.0;
  return table.parameters[lo] +
      (table.parameters[hi] - table.parameters[lo]) * local;
}