Ejemplo n.º 1
0
  private void getMinMax(double p1, double p2, double p3, double p4, double[] minMax) {
    if (p4 > p1) {
      minMax[0] = p1;
      minMax[1] = p4;
    } else {
      minMax[0] = p4;
      minMax[1] = p1;
    }

    double c0 = 3 * (p2 - p1);
    double c1 = 6 * (p3 - p2);
    double c2 = 3 * (p4 - p3);
    double[] eqn = {c0, c1 - 2 * c0, c2 - c1 + c0};
    int roots = QuadCurve2D.solveQuadratic(eqn);
    for (int r = 0; r < roots; r++) {
      double tv = eqn[r];
      if ((tv <= 0) || (tv >= 1)) continue;
      tv =
          ((1 - tv) * (1 - tv) * (1 - tv) * p1
              + 3 * tv * (1 - tv) * (1 - tv) * p2
              + 3 * tv * tv * (1 - tv) * p3
              + tv * tv * tv * p4);
      if (tv < minMax[0]) minMax[0] = tv;
      else if (tv > minMax[1]) minMax[1] = tv;
    }
  }