2017-04-08 9 views
0

Ich versuche, eine Plotter-Klasse zu schreiben, um eine Reihe von Datenpunkten (x, y, z) in einem Array mit Jzy3d anzuzeigen. Die Klasse sollte eine Methode plot() enthalten, die den Datensatz übernimmt und (automatisch) in einem 3D-Koordinatensystem anzeigt.
Die Methode soll in einer zeitabhängigen Schleife sequentiell aufgerufen werden.Einfacher Streuplotter mit Jzy3d (Java)

Bis jetzt habe ich es geschafft, eine scatter plot demo for Jzy3d arbeiten, aber ich weiß nicht, was jedes Bit des Codes tut. Die Dokumentation von Jzy3d bietet nicht so viele Informationen und ich kann keine Tutorials online finden.

Es wäre sehr zu begrüßen, wenn jemand die Demo erklären oder (noch besser) einen einfachen Plotter schreiben könnte, der eine ähnliche Methode enthält.

Alle effizient arbeitenden Plotten Alternativen zu Jzy3d würde auch geschätzt werden.

Demo-Code:

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); 
    } 
} 

Antwort

0

diese Methode sollte neu erstellen Streu

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

dieser Code zeigt, wie Daten-Set erstellen, nur Ihre Werte von Koordinaten verwenden und Farbe

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); 
    }