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