scaledCurve method

Bezier scaledCurve(
  1. double distance
)

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