scaledCurve method
Returns a Bezier instance whose endpoints are distance
units away from the
endpoints of this and whose control points have been moved in the same direction.
Results are best on simple curves. Although scaledCurve can be called on non-simple curves, the return value may not resemble a proper offset curve. For better results on non-simple curves, try offsetCurve.
A scaled linear curve is translated by distance
units along its start
point normal vector.
Implementation
Bezier scaledCurve(double distance) {
if (isLinear) {
return _translatedLinearCurve(distance);
}
var origin = _scalingOrigin;
final scaledCurvePoints = <Vector2>[];
final firstOrderPoints = firstOrderDerivativePoints;
final scaledStartPoint =
_nonOverlappingOffsetPointAt(0.0, distance, 0, firstOrderPoints);
scaledCurvePoints.add(scaledStartPoint);
final scaledEndPoint =
_nonOverlappingOffsetPointAt(1.0, distance, order, firstOrderPoints);
final startTangentPoint = Vector2.copy(scaledStartPoint);
startTangentPoint.add(
derivativeAt(0.0, cachedFirstOrderDerivativePoints: firstOrderPoints));
scaledCurvePoints.add(intersectionPointBetweenTwoLines(
scaledStartPoint, startTangentPoint, origin, points[1]) ??
startTangentPoint);
if (order == 3) {
final endTangentPoint = Vector2.copy(scaledEndPoint);
endTangentPoint.add(derivativeAt(1.0,
cachedFirstOrderDerivativePoints: firstOrderPoints));
scaledCurvePoints.add(intersectionPointBetweenTwoLines(
scaledEndPoint, endTangentPoint, origin, points[2]) ??
endTangentPoint);
}
scaledCurvePoints.add(scaledEndPoint);
return Bezier.fromPoints(scaledCurvePoints);
}