intersections

This commit is contained in:
Armin Wolf 2017-05-29 18:08:47 +02:00
parent 7e02f156a1
commit 6940ebbe62
3 changed files with 70 additions and 10 deletions

View File

@ -22,14 +22,13 @@ public class Presenter {
private MainFrame view;
private LinkedList<Pair> 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().size();i++){
for (int j=i;j<getLines().size();j++){
if (i != j)
model.addNode(calcIntersection(getLines().get(i), getLines().get(j)));
}
}
}
});
thread.start();
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
/***************************************************************************************************************************
* Getter und Setter Methoden
***************************************************************************************************************************/
@ -97,11 +139,11 @@ public class Presenter {
}
public LinkedList<Pair> getLines() {
return lines;
return this.model.getLines();
}
public void setLines(LinkedList<Pair> lines) {
this.lines = lines;
this.model.setLines(lines);
}
public Double getMax() {

View File

@ -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<Pair> lines;
private LinkedList<Pair> 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<Pair> lines){
public void setPrameters(Double pmax, Double pmin, LinkedList<Pair> lines, LinkedList<Pair> 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);
}

View File

@ -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