JFreeChart łączenie punktow

0

Cześć, mam problem, mianowicie napisalem program rysujacy trochoide (tak wyglada ta krzywa: http://curvebank.calstatela.edu/cycloidmaple/trochoid22.gif). Jak latwo mozecie zauwazyc, niektore wartosci iksow (X) przyjmuja dwa igreki (Y). Ta biblioteka laczy punkty w kolejnosci nanoszenia na wykres czego skutkiem sa zamazane (wypelnione kolorem) te pętelki. Macie moze jakis pomysl, co zrobic, zeby na wykresie widoczny byl sam kontur? Moze np. nanoszenie punktow bardzo gesto bez laczenia ich ale jak to zrobic w praktyce? Z gory dzieki za odp.

Mój kod:

package kodpaczka;

/**
 *
 * @author USER
 */
import java.awt.Color;
import java.awt.Shape;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;

public class RysujPanel {
     public RysujPanel(){ 
     }
     
     private static JFreeChart createChart(XYDataset dataset){
        JFreeChart chart = ChartFactory.createXYLineChart(
                "TROCHOIDA", "Zakres [rad]", 
                "Wartosc ", dataset, PlotOrientation.VERTICAL,
                true, false, false);
        chart.setBackgroundPaint(Color.lightGray);
        
        XYPlot plot = (XYPlot) chart.getPlot();
        plot.setBackgroundPaint(Color.white);
        plot.setDomainGridlinePaint(Color.black);
        plot.setRangeGridlinePaint(Color.black);
      
        return chart;
    }
     
    private static XYDataset createDataset() {
        int k = 100000;
        XYSeries s1 = new XYSeries("TROCHOIDA");
        
        double step = Dane.zakres/(double)(k);
       // double[] x = new double[100000];
       // double[] y = new double[100000];
        for (int i = 0; i < k; i++) {
           //  x[i] = i * step * Dane.a - Dane.b * Math.sin(i * step);
           // y[i] = Dane.a - Dane.b * Math.cos(i * step);
            
           double x = i * step * Dane.a - Dane.b * Math.sin(i * step);
           
           double    y = Dane.a - Dane.b * Math.cos(i * step);
            
            s1.add(x,y);
        }
     
        XYSeriesCollection dataset = new XYSeriesCollection();
        dataset.addSeries(s1);
        return dataset;
    }
     
     public static JPanel createWoPanel() {
        JFreeChart chart = createChart(createDataset());
        return new ChartPanel(chart);
    }
}
 
0

Na pewno jest zbyt wiele punktów.
P.S. Polska nazwa tej krzywej to cykloida.

0

Wobec tego moglbys mi powiedziec, jak nalezy te zbedne punkty usunac? Kombinowalem cos z tablicami ale nic to nie dalo..

0

Nie uważam, że zbyt duża ilość punktów jest przyczyną złego rysunku. Chodziło mi raczej o wydajność - tyle punktów to duża przesada. Napisałem programik, który rysuje cykloidę na panelu o rozmiarze 1820x920. Jeżeli rysowane są tylko punkty, to potrzeba ich około 2500, jeżeli rysowane są również odcinki łączące kolejne punkty to wystarcza 1000. Nie korzystam z biblioteki JFreeChart, rysuję "samodzielnie" i rysunki są poprawne. Może jest błąd w bibliotece.
cykloida.png

0

Generalnie musze zastosowac wlasnie jFreeChart. Kolega mowi, ze on cos z bibliotekami zrobil, chyba od nowa dodal i u niego to pomoglo, u mnie niestety nie ale to juz go dopytam. W kazdym razie dzieki za zaangazowanie :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1