Старая проблема решена:
Подскажите пожалуйста, как в Java можно построить 3D-поверхность по набору координат [X,Y,Z] (желательно с примерами)?
Попытался с помощью библиотеки
Jzy3D, но недостаток документации, работающих [у меня] примеров и знаний поставил на этих попытках крест.
UPD: Новая проблема:
Как сделать размах осей графика от
0.0 до
1.0 по оси Z (см изображение)
public class 3dSurface {
public static void main(String[] args) {
double[] xzCoord = {0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0};
double[] yzCoord = {0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0};
double[][] xyCoord = {
{0, 0.669999, 0.669999, 0.67, 0.669999, 0.669999, 0.669999, 0.67, 0.669999, 0.67, 0.444456},
{0.33, 0.423135, 0.514753, 0.567927, 0.598819, 0.609384, 0.598819, 0.588316, 0.588316, 0.588316, 0.444456 },
{0.33, 0.372351, 0.436996, 0.490949, 0.539678, 0.563004, 0.588315, 0.588316, 0.588316, 0.588316, 0.444456},
{0.330001, 0.357742, 0.411684, 0.478472, 0.521527, 0.546111, 0.573646, 0.588316, 0.588316, 0.588316, 0.444456},
{0.33, 0.35482, 0.411684, 0.478472, 0.5, 0.525409, 0.554987, 0.588316, 0.588316, 0.588316, 0.444456},
{0.33, 0.35482, 0.411684, 0.453888, 0.47459, 0.5, 0.53099, 0.567926, 0.588316, 0.588316, 0.444456},
{0.33, 0.35482, 0.411684, 0.426353, 0.445013, 0.46901, 0.5, 0.539678, 0.588316, 0.588316, 0.444456 },
{0.330001, 0.357742, 0.385339, 0.39665, 0.411684, 0.432073, 0.460321, 0.5, 0.554987, 0.588316, 0.444456},
{0.33, 0.372351, 0.372351, 0.372351, 0.376626, 0.390615, 0.411684, 0.445013, 0.5, 0.588316, 0.444456},
{0.33, 0.365375, 0.365375, 0.365375, 0.365375, 0.365375, 0.365375, 0.376626, 0.411684, 0.5, 0.444456},
{0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.555545}
};
List<Polygon> polygons = new ArrayList<Polygon>();
for(int i = 0; i < xyCoord.length -1; i++){
for(int j = 0; j < xyCoord[i].length -1; j++){
Polygon polygon = new Polygon();
polygon.add(new Point(new Coord3d(xzCoord[i], yzCoord[j], xyCoord[i][j]) ));
polygon.add(new Point( new Coord3d(xzCoord[i], yzCoord[j]+0.1, xyCoord[i][j+1]) ));
polygon.add(new Point( new Coord3d(xzCoord[i]+0.1, yzCoord[j]+0.1, xyCoord[i+1][j+1]) ));
polygon.add(new Point( new Coord3d(xzCoord[i]+0.1, yzCoord[j], xyCoord[i+1][j]) ));
polygons.add(polygon);
System.out.println("Still Running");
}
}
Shape surface = new Shape(polygons);
surface.setColorMapper(new ColorMapper(new ColorMapRainbow(),
surface.getBounds().getZmin(),
surface.getBounds().getZmax(),
new Color(1,1,1,1f)));
surface.setWireframeDisplayed(true);
surface.setWireframeColor(Color.BLACK);
surface.setFaceDisplayed(true);
System.out.println("A few moments...");
Chart chart = new AWTChart(Quality.Nicest);
chart.setViewMode(ViewPositionMode.FREE);
chart.addMouseController();
System.out.println("Finishing up...");
chart.getScene().getGraph().add(surface);
System.out.println("Done...");
chart.open("Plot", new Rectangle(200,200,600,600));
}
}