algorithms-for-computing-li.../src/main/java/View/ArrangementDialog.java

99 lines
3.1 KiB
Java

package View;
import Model.Coordinates;
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.chart.axis.ValueAxis;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import javax.swing.*;
import java.awt.*;
import java.awt.Dimension;
import java.util.LinkedList;
/**
* Implementierung verschiedener Algorithmen zur Berechnung von Ausgleichsgeraden.
*
* @Author: Armin Wolf
* @Email: a_wolf28@uni-muenster.de
* @Date: 28.05.2017.
*/
public class ArrangementDialog extends JPanel {
private LinkedList<Coordinates> lines;
private LinkedList<Coordinates> points;
private double max;
private double min;
private JFreeChart chart;
private ChartPanel panel;
private double domainMin, domainMax;
private double rangeMin, rangeMax;
public ArrangementDialog(){
super();
this.setPreferredSize(new Dimension(800,500));
}
public void setPrameters(Double pmax, Double pmin, LinkedList<Coordinates> lines, LinkedList<Coordinates> points){
this.max = pmax;
this.min = pmin;
this.lines = lines;
this.points = points;
this.domainMin = Double.MAX_VALUE;
this.domainMax = Double.MIN_VALUE;
this.rangeMin = Double.MAX_VALUE;
this.rangeMax = Double.MIN_VALUE;
}
public void createArrangement(){
XYSeriesCollection dataset = new XYSeriesCollection();
for (Coordinates p : lines) {
XYSeries series = new XYSeries(p.getX()+p.getY());
series.add((-1 * this.max), (((-1 * this.max) * p.getX()) + p.getY()));
series.add(this.max, ((this.max * p.getX()) + p.getY()));
dataset.addSeries(series);
}
XYSeries intersections = new XYSeries("intersections");
for (Coordinates p : points) {
domainMax = domainMax < p.getX() ? p.getX() : domainMax;
domainMin = domainMin > p.getX() ? p.getX() : domainMin;
rangeMax = rangeMax < p.getY() ? p.getY() : rangeMax;
rangeMin = rangeMin > p.getY() ? p.getY() : rangeMin;
intersections.add(p.getX(), p.getY());
}
dataset.addSeries(intersections);
chart = ChartFactory.createXYLineChart(
null, null, null, dataset,
PlotOrientation.HORIZONTAL, false, false, false );
final XYPlot plot = chart.getXYPlot();
ValueAxis domain = plot.getDomainAxis();
ValueAxis range = plot.getRangeAxis();
domain.setRange(domainMin-1,domainMax+1);
range.setRange(rangeMin-1,rangeMax+1);
plot.setBackgroundPaint(Color.WHITE);
plot.setDomainGridlinePaint(Color.white);
plot.setRangeGridlinePaint(Color.white);
final XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
renderer.setSeriesLinesVisible(dataset.indexOf(intersections), false);
plot.setRenderer(renderer);
panel = new ChartPanel(chart);
this.add(panel);
}
}