# lerp method

RRect lerp (RRect a, RRect b, double t)

Linearly interpolate between two rounded rectangles.

If either is null, this function substitutes RRect.zero instead.

The `t` argument represents position on the timeline, with 0.0 meaning that the interpolation has not started, returning `a` (or something equivalent to `a`), 1.0 meaning that the interpolation has finished, returning `b` (or something equivalent to `b`), and values in between meaning that the interpolation is at the relevant point on the timeline between `a` and `b`. The interpolation can be extrapolated beyond 0.0 and 1.0, so negative values and values greater than 1.0 are valid (and can easily be generated by curves such as `Curves.elasticInOut`).

Values for `t` are usually obtained from an `Animation<double>`, such as an `AnimationController`.

## Implementation

    static RRect lerp(RRect a, RRect b, double t) {
      assert(t != null);
      if (a == null && b == null)
        return null;
      if (a == null) {
        return new RRect._fromList(<double>[
          b.left * t,
          b.top * t,
          b.right * t,
          b.bottom * t,
          b.tlRadiusX * t,
          b.tlRadiusY * t,
          b.trRadiusX * t,
          b.trRadiusY * t,
          b.brRadiusX * t,
          b.brRadiusY * t,
          b.blRadiusX * t,
          b.blRadiusY * t,
        ]);
      }
      if (b == null) {
        final double k = 1.0 - t;
        return new RRect._fromList(<double>[
          a.left * k,
          a.top * k,
          a.right * k,
          a.bottom * k,
          a.tlRadiusX * k,
          a.tlRadiusY * k,
          a.trRadiusX * k,
          a.trRadiusY * k,
          a.brRadiusX * k,
          a.brRadiusY * k,
          a.blRadiusX * k,
          a.blRadiusY * k,
        ]);
      }
      return new RRect._fromList(<double>[
        lerpDouble(a.left, b.left, t),
        lerpDouble(a.top, b.top, t),
        lerpDouble(a.right, b.right, t),
        lerpDouble(a.bottom, b.bottom, t),
        lerpDouble(a.tlRadiusX, b.tlRadiusX, t),
        lerpDouble(a.tlRadiusY, b.tlRadiusY, t),
        lerpDouble(a.trRadiusX, b.trRadiusX, t),
        lerpDouble(a.trRadiusY, b.trRadiusY, t),
        lerpDouble(a.brRadiusX, b.brRadiusX, t),
        lerpDouble(a.brRadiusY, b.brRadiusY, t),
        lerpDouble(a.blRadiusX, b.blRadiusX, t),
        lerpDouble(a.blRadiusY, b.blRadiusY, t),
      ]);
    }