Jzy3d 3d插值图未渲染

时间:2018-04-24 18:43:54

标签: plot graph interpolation jzy3d

我试图在给定一组坐标的情况下绘制一条三维路径。从jzy3d的演示应用程序中,我发现这可以通过他们的BernsteinInterpolatorLineStripInterpolated类来实现。

在他们的源代码的帮助下,我重现这一点的尝试如下:

public static void main(String[] args) {

    BernsteinInterpolator interp = new BernsteinInterpolator();

    List<Coord3d> controlCoords = new ArrayList<>();
    controlCoords.add(new Coord3d(0.0, 0.0, 0.0));        
    controlCoords.add(new Coord3d(1.0, 0.0, 1.0));
    controlCoords.add(new Coord3d(1.0, 0.0, 2.0));
    controlCoords.add(new Coord3d(1.0, 1.0, 2.0));
    controlCoords.add(new Coord3d(0.0, 1.0, 2.0));
    controlCoords.add(new Coord3d(3.0, 2.0, -1.0));

    LineStripInterpolated line = new LineStripInterpolated(interp, controlCoords, 30);

    Chart chart = new AWTChart(Quality.Intermediate);
    chart.add(line);
    chart.open("chart test", 600, 600);
}

这是我期望得到的,根据演示应用程序 - &gt; DemoPlot

不幸的是,上面只渲染了一个没有错误或异常的空白窗口。有谁知道出了什么问题?非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

所以我深入研究了源代码,发现有一种方法可以绕过LineStripInterpolated类,如下所示:

public static void main(String[] args) {

    List<Coord3d> controlCoords = new ArrayList<>();
    controlCoords.add(new Coord3d(0.0F, 0.0F, 0.0F));
    controlCoords.add(new Coord3d(1.0F, 0.0F, 1.0F));
    controlCoords.add(new Coord3d(1.0F, 0.0F, 2.0F));
    controlCoords.add(new Coord3d(1.0F, 1.0F, 2.0F));
    controlCoords.add(new Coord3d(0.0F, 1.0F, 2.0F));
    controlCoords.add(new Coord3d(3.0F, 2.0F, -1.0F));

    BernsteinInterpolator interp = new BernsteinInterpolator();
    List<Coord3d> interpolatedCoords = interp.interpolate(controlCoords, 30);

    List<Point> controlPoints = new ArrayList<>();
    for (Coord3d coord : controlCoords) {
        controlPoints.add(new Point(coord, Color.RED, 5.0));
    }

    List<Point> interpPoints = new ArrayList<>();
    for (Coord3d coord : interpolatedCoords) {
        interpPoints.add(new Point(coord, Color.BLUE, 3.0));
    }

    LineStrip line = new LineStrip(interpolatedCoords);
    line.setWireframeColor(Color.BLACK);

    Chart chart = new AWTChart(Quality.Intermediate);
    chart.add(line);
    chart.add(controlPoints);
    chart.add(interpPoints);
    chart.open("chart test", 600, 600);
}

希望这可以帮助其他人解决同样的问题。我仍然很好奇为什么我以前的方法不起作用。 :(