reduce method

(DirectionVector, double) reduce(
  1. double smallVectorLength
)

Returns a new vector starting after smallVectorLength and ending at secondVector Returns the remaining length of smallVectorLength if we cannot fully consume it

Implementation

(DirectionVector, double) reduce(double smallVectorLength) {
  if (smallVectorLength == 0) return (this, 0);
  if (smallVectorLength >= length) return (DirectionVector.nil(secondVector), smallVectorLength - length);
  var rescaleFactor = smallVectorLength / length;

  var rescaledVector = Offset(vector.dx * rescaleFactor, vector.dy * rescaleFactor);

  var newOffset = Offset(firstVector.dx + rescaledVector.dx, firstVector.dy + rescaledVector.dy);

  return (
    DirectionVector._(
      vector: Offset(secondVector.dx - newOffset.dx, secondVector.dy - newOffset.dy),
      length: length - smallVectorLength,
      firstVector: newOffset,
      secondVector: secondVector,
    ),
    0,
  );
}