intersections
This commit is contained in:
parent
7e02f156a1
commit
6940ebbe62
|
@ -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() {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue