Orsoncharts chart3D表面渲染不起作用

时间:2016-11-14 14:21:30

标签: javafx 3d orson-charts

我正在使用orson chart的Chart3D来制作曲面图,并且由于某种原因,图形没有正确地着色渐变。代码如下:

@SuppressWarnings("serial")
Function3D function = new Function3D() {
    @Override
    public double getValue(double x, double z) {
        double xKey = Math.round(x * 100) / 100;
        double zKey = Math.round(z * 100) / 100;
        if(plotValues.containsKey(new Point2D(xKey,zKey))) {
            return plotValues.get(new Point2D(xKey,zKey));
        } else {
            return 0;
        }
    }
};

String xTitle = factorSweepComboBox.getSelectionModel().getSelectedItem();
String yTitle = outputComboBox.getSelectionModel().getSelectedItem();
String zTitle = factorSweep2ComboBox.getSelectionModel().getSelectedItem();

// Create surface plot
Chart3D chart = Chart3DFactory.createSurfaceChart(
        "", 
        "", 
        function, xTitle, yTitle, zTitle);

XYZPlot xyzplot = (XYZPlot) chart.getPlot();
xyzplot.setDimensions(new Dimension3D(10, 10, 10));
ValueAxis3D xAxis = xyzplot.getXAxis();
xAxis.setRange(xLow, xUp);
ValueAxis3D zAxis = xyzplot.getZAxis();
zAxis.setRange(zLow, zUp);
ValueAxis3D yAxis = xyzplot.getYAxis();
yAxis.setRange(yLow, yUp);
SurfaceRenderer renderer = (SurfaceRenderer) xyzplot.getRenderer();
renderer.setColorScale(new GradientColorScale(new Range(yLow, yUp), 
        Color.BLUE, Color.YELLOW));
Chart3DViewer chartPanel = new Chart3DViewer(chart);      
chartPane.getChildren().addAll(chartPanel);

plotValues是将(x,z)2D点映射到double y输出值的hashmap。 xLow,xUp等是范围值,并且都正确设置。 yLow和yUp是我想要的。但是,当我运行代码时,我的表面都是一种颜色,即使键看起来正确,也没有任何渐变。我也尝试过:

SurfaceRenderer renderer = new SurfaceRenderer(function);
renderer.setColorScale(new GradientColorScale(new Range(yLow, yUp), 
                                Color.BLUE, Color.YELLOW));
xyzplot.setRenderer(renderer);

,结果是一样的。以下是屏幕截图的链接:http://i.imgur.com/F2iYFh1.png

1 个答案:

答案 0 :(得分:0)

我发现了问题。这是由于我的函数只返回离散x和z值的实数值,如果(x,z)的集合与我自己的数据散列中的集合匹配,则该值有效。但是,表面渲染器使用两个" x"之间的中点。和/" z"在数据集中绘制曲面以确定颜色,并且因为中间点不在散列中它返回0,使整个曲面成为一种颜色。