From 6940ebbe62d2ca9df8dd6eb0174e7e959db5c14e Mon Sep 17 00:00:00 2001 From: Armin Wolf Date: Mon, 29 May 2017 18:08:47 +0200 Subject: [PATCH] intersections --- src/main/java/Presenter/Presenter.java | 56 ++++++++++++++++++++--- src/main/java/View/ArrangementDialog.java | 22 ++++++++- src/main/java/View/MainFrame.java | 2 +- 3 files changed, 70 insertions(+), 10 deletions(-) diff --git a/src/main/java/Presenter/Presenter.java b/src/main/java/Presenter/Presenter.java index 7d204d8..c18d700 100644 --- a/src/main/java/Presenter/Presenter.java +++ b/src/main/java/Presenter/Presenter.java @@ -22,14 +22,13 @@ public class Presenter { private MainFrame view; - private LinkedList lines; private Double max; private Double min; public Presenter(Arrangement model, MainFrame view){ this.model = model; this.view = view; - this.lines = new LinkedList<>(); + Double[] x = {1d,2d,3d,4d,10d,12d,18d}; Double[] y = {9d,15d,19d,20d,45d,55d,78d}; @@ -41,9 +40,14 @@ public class Presenter { for (int j=0;j<7;j++){ Pair p = new Pair(x[j], y[j]); view.log("f(x) = "+p.getX()+"* x + "+p.getY()); - lines.add(p); + this.model.addLine(p); } view.log(""); + calcArrangementNodes(); + //print + for (Pair p : model.getNodes()) { + view.log(p.getX()+", "+p.getY()); + } extractBounds(); } @@ -68,13 +72,51 @@ public class Presenter { } private void extractBounds(){ - Pair pmax = Collections.max(lines); - Pair pmin = Collections.min(lines); + Pair pmax = Collections.max(model.getLines()); + Pair pmin = Collections.min(model.getLines()); max = pmax.getX() >= pmax.getY() ? pmax.getX() : pmax.getY(); min = pmin.getX() <= pmin.getY() ? pmin.getX() : pmin.getY(); } + public Pair calcIntersection(Pair a, Pair b){ + Pair p1; + Pair p2; + + if (b.compareTo(a) > 0){ + p1 = a; + p2 = b; + } else { + p1 = b; + p2 = a; + } + + Double x = (p1.getY() - p2.getY()) / (p1.getX() - p2.getX()); + Double y = ((p2.getX() * p1.getY()) - (p1.getX() * p2.getY())) / (p2.getX() - p1.getX()); + System.out.printf("RESULT: (%3.3f, %3.3f)\n",x, y); + return new Pair(x,y); + } + + public void calcArrangementNodes(){ + Thread thread = new Thread(new Runnable() { + @Override + public void run() { + for (int i=0;i getLines() { - return lines; + return this.model.getLines(); } public void setLines(LinkedList lines) { - this.lines = lines; + this.model.setLines(lines); } public Double getMax() { diff --git a/src/main/java/View/ArrangementDialog.java b/src/main/java/View/ArrangementDialog.java index fb33129..201345e 100644 --- a/src/main/java/View/ArrangementDialog.java +++ b/src/main/java/View/ArrangementDialog.java @@ -5,6 +5,8 @@ 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.XYSeries; import org.jfree.data.xy.XYSeriesCollection; @@ -23,6 +25,7 @@ import java.util.LinkedList; public class ArrangementDialog extends JPanel { private LinkedList lines; + private LinkedList points; private double max; private double min; private JFreeChart chart; @@ -33,10 +36,11 @@ public class ArrangementDialog extends JPanel { this.setPreferredSize(new Dimension(800,500)); } - public void setPrameters(Double pmax, Double pmin, LinkedList lines){ + public void setPrameters(Double pmax, Double pmin, LinkedList lines, LinkedList points){ this.max = pmax; this.min = pmin; this.lines = lines; + this.points = points; } public void createArrangement(){ @@ -49,10 +53,24 @@ public class ArrangementDialog extends JPanel { dataset.addSeries(series); } + XYSeries intersections = new XYSeries("intersections"); + for (Pair p : points) { + intersections.add(p.getX(), p.getY()); + } + dataset.addSeries(intersections); + chart = ChartFactory.createXYLineChart( null, null, null, dataset, PlotOrientation.HORIZONTAL, false, false, false ); - chart.getPlot().setBackgroundPaint(Color.WHITE); + final XYPlot plot = chart.getXYPlot(); + 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); } diff --git a/src/main/java/View/MainFrame.java b/src/main/java/View/MainFrame.java index 8169896..9c5cbb8 100644 --- a/src/main/java/View/MainFrame.java +++ b/src/main/java/View/MainFrame.java @@ -51,7 +51,7 @@ public class MainFrame extends JFrame { public void createArrangement() { if (arrangement == null){ arrangement = new ArrangementDialog(); - arrangement.setPrameters(getPresenter().getMax(), getPresenter().getMin(), getPresenter().getLines()); + arrangement.setPrameters(getPresenter().getMax(), getPresenter().getMin(), getPresenter().getLines(), getPresenter().getModel().getNodes()); arrangement.createArrangement(); SwingUtilities.invokeLater(new Runnable() { @Override