Простой точечный плоттер с Jzy3d (Java)

Я пытаюсь написать класс плоттера для отображения набора точек данных (x, y, z), хранящихся в массиве, с использованием Jzy3d. Класс должен содержать метод plot(), который берет набор данных и (автоматически) отображает его в трехмерной системе координат.
Предполагается, что метод будет вызываться последовательно в цикле, зависящем от времени.

До сих пор мне удалось получить демонстрационная диаграмма рассеяния для Jzy3d работает, но я не знаю, что делает каждый бит кода. Документация Jzy3d не предоставляет столько информации, и я не могу найти какие-либо учебные пособия в Интернете.

Было бы очень признательно, если бы кто-нибудь мог объяснить демонстрацию или (что еще лучше) написать простой плоттер, который содержит аналогичный метод.

Также будут оценены любые эффективные рабочие альтернативы Jzy3d для построения графиков.

Демонстрационный код:

import java.util.Random;

import org.jzy3d.analysis.AbstractAnalysis;
import org.jzy3d.analysis.AnalysisLauncher;
import org.jzy3d.chart.factories.AWTChartComponentFactory;
import org.jzy3d.colors.Color;
import org.jzy3d.maths.Coord3d;
import org.jzy3d.plot3d.primitives.Scatter;
import org.jzy3d.plot3d.rendering.canvas.Quality;


public class ScatterDemo extends AbstractAnalysis{
    public static void main(String[] args) throws Exception {
        AnalysisLauncher.open(new ScatterDemo());
    }

    @Override
    public void init(){
        int size = 500000;
        float x;
        float y;
        float z;
        float a;

        Coord3d[] points = new Coord3d[size];
        Color[]   colors = new Color[size];

        Random r = new Random();
        r.setSeed(0);

        for(int i=0; i<size; i++){
            x = r.nextFloat() - 0.5f;
            y = r.nextFloat() - 0.5f;
            z = r.nextFloat() - 0.5f;
            points[i] = new Coord3d(x, y, z);
            a = 0.25f;
            colors[i] = new Color(x, y, z, a);
        }

        Scatter scatter = new Scatter(points, colors);
        chart = AWTChartComponentFactory.chart(Quality.Advanced, "newt");
        chart.getScene().add(scatter);
    }
}

person FizzleDizzle    schedule 08.04.2017    source источник


Ответы (1)


этот метод должен создать новый разброс

public void plot(Coord3d[] points, Color[]   colors) {
    Scatter scatter = new Scatter(points, colors);
    chart = AWTChartComponentFactory.chart(Quality.Advanced, "newt");
    chart.getScene().add(scatter);
}

этот код показывает, как создать набор данных, просто используйте свои значения координат и цвета

int size = 100
Coord3d[] points = new Coord3d[size];
Color[]   colors = new Color[size];  
for(int i=0; i < size; i++){
        x = i;
        y = i;
        z = i;
        points[i] = new Coord3d(x, y, z);

        r = 0.5;
        b = 0.5;
        g = 0.5;
        colors[i] = new Color(r, g, b);
    }
person Yurii Mytiai    schedule 17.02.2018