setCurve method

void setCurve(
  1. int frameIndex,
  2. double cx1,
  3. double cy1,
  4. double cx2,
  5. double cy2,
)

Implementation

void setCurve(
    int frameIndex, double cx1, double cy1, double cx2, double cy2) {
  final double tmpx = (-cx1 * 2 + cx2) * 0.03, tmpy = (-cy1 * 2 + cy2) * 0.03;
  final double dddfx = ((cx1 - cx2) * 3 + 1) * 0.006,
      dddfy = ((cy1 - cy2) * 3 + 1) * 0.006;
  double ddfx = tmpx * 2 + dddfx, ddfy = tmpy * 2 + dddfy;
  double dfx = cx1 * 0.3 + tmpx + dddfx * 0.16666667,
      dfy = cy1 * 0.3 + tmpy + dddfy * 0.16666667;

  int i = frameIndex * CurveTimeline.bezierSize;
  curves[i++] = CurveTimeline.bezier;

  double x = dfx, y = dfy;
  for (final int n = i + CurveTimeline.bezierSize - 1; i < n; i += 2) {
    curves[i] = x;
    curves[i + 1] = y;
    dfx += ddfx;
    dfy += ddfy;
    ddfx += dddfx;
    ddfy += dddfy;
    x += dfx;
    y += dfy;
  }
}