evenTValueAt method

double evenTValueAt(
  1. double t
)

Returns the parameter value along the curve at the fraction of arc length t along the curve.

Values of t outside the range (0.0 .. 1.0) return values clamped to that range.

Implementation

double evenTValueAt(double t) {
  if (t >= 1.0) {
    return 1.0;
  }

  var upperBoundIndex = 0;
  for (var index = 0; index < _cumulativeArcLengths.length; index++) {
    final arcLengthAtIndex = _cumulativeArcLengths[index];
    final arcLengthFraction = arcLengthAtIndex / arcLength;
    if (arcLengthFraction > t) {
      upperBoundIndex = index;
      break;
    }
  }

  if (upperBoundIndex < 1) {
    return 0.0;
  }

  final lowerBoundIndex = upperBoundIndex - 1;

  final lowerBoundArcLength = _cumulativeArcLengths[lowerBoundIndex];
  final upperBoundArcLength = _cumulativeArcLengths[upperBoundIndex];

  final lowerBoundArcFraction = lowerBoundArcLength / arcLength;
  final upperBoundArcFraction = upperBoundArcLength / arcLength;

  final arcFractionParameter =
      inverseMix(lowerBoundArcFraction, upperBoundArcFraction, t);

  final parametersCount = curveLookUpTable.length - 1;

  final parameterAtLowerBound = (upperBoundIndex - 1) / parametersCount;
  final parameterAtUpperBound = upperBoundIndex / parametersCount;

  return mix(
      parameterAtLowerBound, parameterAtUpperBound, arcFractionParameter);
}