intersections
This commit is contained in:
parent
7e02f156a1
commit
6940ebbe62
|
@ -22,14 +22,13 @@ public class Presenter {
|
||||||
private MainFrame view;
|
private MainFrame view;
|
||||||
|
|
||||||
|
|
||||||
private LinkedList<Pair> lines;
|
|
||||||
private Double max;
|
private Double max;
|
||||||
private Double min;
|
private Double min;
|
||||||
|
|
||||||
public Presenter(Arrangement model, MainFrame view){
|
public Presenter(Arrangement model, MainFrame view){
|
||||||
this.model = model;
|
this.model = model;
|
||||||
this.view = view;
|
this.view = view;
|
||||||
this.lines = new LinkedList<>();
|
|
||||||
|
|
||||||
Double[] x = {1d,2d,3d,4d,10d,12d,18d};
|
Double[] x = {1d,2d,3d,4d,10d,12d,18d};
|
||||||
Double[] y = {9d,15d,19d,20d,45d,55d,78d};
|
Double[] y = {9d,15d,19d,20d,45d,55d,78d};
|
||||||
|
@ -41,9 +40,14 @@ public class Presenter {
|
||||||
for (int j=0;j<7;j++){
|
for (int j=0;j<7;j++){
|
||||||
Pair p = new Pair(x[j], y[j]);
|
Pair p = new Pair(x[j], y[j]);
|
||||||
view.log("f(x) = "+p.getX()+"* x + "+p.getY());
|
view.log("f(x) = "+p.getX()+"* x + "+p.getY());
|
||||||
lines.add(p);
|
this.model.addLine(p);
|
||||||
}
|
}
|
||||||
view.log("");
|
view.log("");
|
||||||
|
calcArrangementNodes();
|
||||||
|
//print
|
||||||
|
for (Pair p : model.getNodes()) {
|
||||||
|
view.log(p.getX()+", "+p.getY());
|
||||||
|
}
|
||||||
extractBounds();
|
extractBounds();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,13 +72,51 @@ public class Presenter {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void extractBounds(){
|
private void extractBounds(){
|
||||||
Pair pmax = Collections.max(lines);
|
Pair pmax = Collections.max(model.getLines());
|
||||||
Pair pmin = Collections.min(lines);
|
Pair pmin = Collections.min(model.getLines());
|
||||||
|
|
||||||
max = pmax.getX() >= pmax.getY() ? pmax.getX() : pmax.getY();
|
max = pmax.getX() >= pmax.getY() ? pmax.getX() : pmax.getY();
|
||||||
min = pmin.getX() <= pmin.getY() ? pmin.getX() : pmin.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
|
* Getter und Setter Methoden
|
||||||
***************************************************************************************************************************/
|
***************************************************************************************************************************/
|
||||||
|
@ -97,11 +139,11 @@ public class Presenter {
|
||||||
}
|
}
|
||||||
|
|
||||||
public LinkedList<Pair> getLines() {
|
public LinkedList<Pair> getLines() {
|
||||||
return lines;
|
return this.model.getLines();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLines(LinkedList<Pair> lines) {
|
public void setLines(LinkedList<Pair> lines) {
|
||||||
this.lines = lines;
|
this.model.setLines(lines);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Double getMax() {
|
public Double getMax() {
|
||||||
|
|
|
@ -5,6 +5,8 @@ import org.jfree.chart.ChartFactory;
|
||||||
import org.jfree.chart.ChartPanel;
|
import org.jfree.chart.ChartPanel;
|
||||||
import org.jfree.chart.JFreeChart;
|
import org.jfree.chart.JFreeChart;
|
||||||
import org.jfree.chart.plot.PlotOrientation;
|
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.XYSeries;
|
||||||
import org.jfree.data.xy.XYSeriesCollection;
|
import org.jfree.data.xy.XYSeriesCollection;
|
||||||
|
|
||||||
|
@ -23,6 +25,7 @@ import java.util.LinkedList;
|
||||||
public class ArrangementDialog extends JPanel {
|
public class ArrangementDialog extends JPanel {
|
||||||
|
|
||||||
private LinkedList<Pair> lines;
|
private LinkedList<Pair> lines;
|
||||||
|
private LinkedList<Pair> points;
|
||||||
private double max;
|
private double max;
|
||||||
private double min;
|
private double min;
|
||||||
private JFreeChart chart;
|
private JFreeChart chart;
|
||||||
|
@ -33,10 +36,11 @@ public class ArrangementDialog extends JPanel {
|
||||||
this.setPreferredSize(new Dimension(800,500));
|
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.max = pmax;
|
||||||
this.min = pmin;
|
this.min = pmin;
|
||||||
this.lines = lines;
|
this.lines = lines;
|
||||||
|
this.points = points;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void createArrangement(){
|
public void createArrangement(){
|
||||||
|
@ -49,10 +53,24 @@ public class ArrangementDialog extends JPanel {
|
||||||
dataset.addSeries(series);
|
dataset.addSeries(series);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
XYSeries intersections = new XYSeries("intersections");
|
||||||
|
for (Pair p : points) {
|
||||||
|
intersections.add(p.getX(), p.getY());
|
||||||
|
}
|
||||||
|
dataset.addSeries(intersections);
|
||||||
|
|
||||||
chart = ChartFactory.createXYLineChart(
|
chart = ChartFactory.createXYLineChart(
|
||||||
null, null, null, dataset,
|
null, null, null, dataset,
|
||||||
PlotOrientation.HORIZONTAL, false, false, false );
|
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);
|
panel = new ChartPanel(chart);
|
||||||
this.add(panel);
|
this.add(panel);
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,7 +51,7 @@ public class MainFrame extends JFrame {
|
||||||
public void createArrangement() {
|
public void createArrangement() {
|
||||||
if (arrangement == null){
|
if (arrangement == null){
|
||||||
arrangement = new ArrangementDialog();
|
arrangement = new ArrangementDialog();
|
||||||
arrangement.setPrameters(getPresenter().getMax(), getPresenter().getMin(), getPresenter().getLines());
|
arrangement.setPrameters(getPresenter().getMax(), getPresenter().getMin(), getPresenter().getLines(), getPresenter().getModel().getNodes());
|
||||||
arrangement.createArrangement();
|
arrangement.createArrangement();
|
||||||
SwingUtilities.invokeLater(new Runnable() {
|
SwingUtilities.invokeLater(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Reference in New Issue