コード例 #1
0
  private void computeSpline(final ChartModel inputModel, DefaultChartModel splineModel) {
    splineModel.clearPoints();
    // Create some double arrays and populate them from the chart model
    // TODO: xs and ys are assumed to be sorted in the call to computeSplineSlopes, which is not
    // guaranteed
    final int pointCount = inputModel.getPointCount();
    double xs[] = new double[pointCount];
    double ys[] = new double[pointCount];
    for (int i = 0; i < pointCount; i++) {
      Chartable p = inputModel.getPoint(i);
      xs[i] = p.getX().position();
      ys[i] = p.getY().position();
    }

    double[] slopes = SplineEngine.computeSplineSlopes(pointCount - 1, xs, ys);

    // Number of divisions in each segment
    int nDivs = 20;
    double rx, ry;

    for (int seg = 0; seg < pointCount - 1; seg++) {
      double xstep = (xs[seg + 1] - xs[seg]) / nDivs;
      for (int i = 0; i <= nDivs; i++) {
        rx = xs[seg] + i * xstep;
        ry =
            SplineEngine.splineEval(
                rx, xs[seg], xs[seg + 1], ys[seg], ys[seg + 1], slopes[seg], slopes[seg + 1]);
        splineModel.addPoint(rx, ry);
      }
    }
  }