如何在 Java 中对极坐标图进行圆角处理?

问题描述 投票:0回答:0

我使用 JFreeChart 创建了极坐标图,其中包含两个数据系列:初始(红色)和修改后(蓝色)。修改后的数据系列有尖角需要磨平,如下图所示。我尝试使用移动平均线,但效果不佳。这是我的情节:

polar plot

我也尝试过插值,但它也没有用。

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

使用移动平均法后情况有所好转,但尖角仍然存在。 After moving average.

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

java plot jfreechart
© www.soinside.com 2019 - 2024. All rights reserved.