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