Тесселятор позволяет создавать полигоны из списка точек. Jzy3d предоставляет два базовых тесселятора: один, который поддерживает точки, стоящие на регулярной сетке (называемой OrthonormalTesselator), другой, который поддерживает неструктурированные точки в качестве входных данных (DelaunayTesselator). Второй не всегда «работает хорошо»: не проблема, связанная с его реализацией, а главным образом тот факт, что трудно решить, как точки должны работать вместе, чтобы сформировать многоугольник в 3d. Вы можете найти некоторые обсуждения по этому поводу в вики и дискуссионных группах Jzy3d.
Чтобы вручную построить полигоны, вот что вы должны сделать:
// Build a polygon list
double [][]distDataProp = new double[][] {{.25,.45, .20},{.56, .89, .45}, {.6, .3,.7}};
List<Polygon> polygons = new ArrayList<Polygon>();
for(int i = 0; i < distDataProp.length -1; i++){
for(int j = 0; j < distDataProp[i].length -1; j++){
Polygon polygon = new Polygon();
polygon.add(new Point( new Coord3d(i, j, distDataProp[i][j]) ));
polygon.add(new Point( new Coord3d(i, j+1, distDataProp[i][j+1]) ));
polygon.add(new Point( new Coord3d(i+1, j+1, distDataProp[i+1][j+1]) ));
polygon.add(new Point( new Coord3d(i+1, j, distDataProp[i+1][j]) ));
polygons.add(polygon);
}
}
// Creates the 3d object
Shape surface = new Shape(polygons);
surface.setColorMapper(new ColorMapper(new ColorMapRainbow(), surface.getBounds().getZmin(), surface.getBounds().getZmax(), new org.jzy3d.colors.Color(1,1,1,1f)));
surface.setWireframeDisplayed(true);
surface.setWireframeColor(org.jzy3d.colors.Color.BLACK);
chart = new Chart();
chart.getScene().getGraph().add(surface);