我使用 JFreeChart 创建了极坐标图,其中包含两个数据系列:初始(红色)和修改后(蓝色)。修改后的数据系列有尖角需要磨平,如下图所示。我尝试使用移动平均线,但效果不佳。这是我的情节:
我也尝试过插值,但它也没有用。
public void interpolate(Map<Double, Double> data) {
double angel = 0.0;
double increment = reader.getPolarAngelsArray()[1];
int length = reader.getNumberOfPolarAngels() * 2 - 1;
double[] x = new double[length];
double[] y = new double[length];
for (int i = 0; i < length; i++) {
x[i] = angel;
y[i] = data.get(angel);
angel += increment;
}
UnivariateInterpolator interpolator = new SplineInterpolator();
UnivariateFunction function = interpolator.interpolate(x, y);
for (double angle = 0.0; angle <= 360.0; angle += increment) {
data.put(angle, function.value(angle));
}
}
移动平均线:
public XYSeries movAvg(XYSeries series) {
ArrayList<Double> avgY = new ArrayList<>();
for (int i = 0; i < series.getItemCount(); i++) {
if (i == 0) {
avgY.add((Double) series.getY(i));
} else if (i == (series.getItemCount() - 1)) {
avgY.add((Double) series.getY(i));
} else {
avgY.add(((Double) series.getY(i - 1) +
(Double) series.getY(i) +
(Double) series.getY(i + 1)) / 3.0);
}
}
for (int i = 0; i < series.getItemCount(); i++) {
series.update(series.getX(i), avgY.get(i));
}
return series;
}
The sample data: angels: 25.0 27.5 30.0 32.5 35.0 37.5 40.0 42.5 45.0 47.5 50.0 52.5 55.0 57.5 60.0 62.5 65.0 values: 327.24 321.03 314.3 307.05 298.64 290.09 280.77 270.14 511.27 488.73 463.07 438.02 411.86 382.51 354.24 324.84 290.96