evenTValueAt method
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);
}