refactor, import und export bei evaluation.
This commit is contained in:
parent
813155347d
commit
646150d2d6
|
@ -1,53 +1,126 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns="http://maven.apache.org/POM/4.0.0"
|
xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<groupId>wwu</groupId>
|
<groupId>wwu</groupId>
|
||||||
<artifactId>masterarbeit</artifactId>
|
<artifactId>Masterarbeit</artifactId>
|
||||||
<version>1.0-SNAPSHOT</version>
|
<version>1.0</version>
|
||||||
<build>
|
|
||||||
<plugins>
|
<build>
|
||||||
<plugin>
|
<plugins>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<plugin>
|
||||||
<artifactId>maven-compiler-plugin</artifactId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<configuration>
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
<source>1.8</source>
|
<configuration>
|
||||||
<target>1.8</target>
|
<source>1.8</source>
|
||||||
</configuration>
|
<target>1.8</target>
|
||||||
</plugin>
|
</configuration>
|
||||||
</plugins>
|
</plugin>
|
||||||
</build>
|
|
||||||
|
|
||||||
|
|
||||||
<dependencies>
|
<!-- Maven Assembly Plugin -->
|
||||||
<!-- https://mvnrepository.com/artifact/org.jfree/jfreechart -->
|
<plugin>
|
||||||
<dependency>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<groupId>org.jfree</groupId>
|
<artifactId>maven-assembly-plugin</artifactId>
|
||||||
<artifactId>jfreechart</artifactId>
|
<version>2.4.1</version>
|
||||||
<version>1.0.14</version>
|
<configuration>
|
||||||
</dependency>
|
<!-- get all project dependencies -->
|
||||||
|
<descriptorRefs>
|
||||||
|
<descriptorRef>jar-with-dependencies</descriptorRef>
|
||||||
|
</descriptorRefs>
|
||||||
|
<!-- MainClass in mainfest make a executable jar -->
|
||||||
|
<archive>
|
||||||
|
<manifest>
|
||||||
|
<mainClass>App</mainClass>
|
||||||
|
</manifest>
|
||||||
|
</archive>
|
||||||
|
|
||||||
<!-- https://mvnrepository.com/artifact/junit/junit -->
|
</configuration>
|
||||||
<dependency>
|
<executions>
|
||||||
<groupId>junit</groupId>
|
<execution>
|
||||||
<artifactId>junit</artifactId>
|
<id>make-assembly</id>
|
||||||
<version>4.12</version>
|
<!-- bind to the packaging phase -->
|
||||||
</dependency>
|
<phase>package</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>single</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>com.googlecode.mavennatives</groupId>
|
||||||
|
<artifactId>maven-nativedependencies-plugin</artifactId>
|
||||||
|
<version>0.0.7</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>unpacknatives</id>
|
||||||
|
<phase>generate-resources</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>copy</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
<!-- OpenCSV-->
|
</plugins>
|
||||||
<dependency>
|
</build>
|
||||||
<groupId>com.opencsv</groupId>
|
|
||||||
<artifactId>opencsv</artifactId>
|
|
||||||
<version>3.9</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!-- JTattoo Look and Feel -->
|
|
||||||
<dependency>
|
<dependencies>
|
||||||
<groupId>com.jtattoo</groupId>
|
<!-- https://mvnrepository.com/artifact/org.jfree/jfreechart -->
|
||||||
<artifactId>JTattoo</artifactId>
|
<dependency>
|
||||||
<version>1.6.11</version>
|
<groupId>org.jfree</groupId>
|
||||||
</dependency>
|
<artifactId>jfreechart</artifactId>
|
||||||
</dependencies>
|
<version>1.0.14</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- https://mvnrepository.com/artifact/junit/junit -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>junit</groupId>
|
||||||
|
<artifactId>junit</artifactId>
|
||||||
|
<version>4.12</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- OpenCSV-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.opencsv</groupId>
|
||||||
|
<artifactId>opencsv</artifactId>
|
||||||
|
<version>3.9</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- JTattoo Look and Feel -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.jtattoo</groupId>
|
||||||
|
<artifactId>JTattoo</artifactId>
|
||||||
|
<version>1.6.11</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- OpenCV -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org</groupId>
|
||||||
|
<artifactId>opencv</artifactId>
|
||||||
|
<version>2.4.13</version>
|
||||||
|
<systemPath>${project.basedir}/src/main/resources/libs/opencv-2413.jar</systemPath>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org</groupId>
|
||||||
|
<artifactId>opencv</artifactId>
|
||||||
|
<version>2.4.13</version>
|
||||||
|
<scope>system</scope>
|
||||||
|
<type>dll</type>
|
||||||
|
<systemPath>${project.basedir}/src/main/resources/libs/x64/opencv_java2413.dll</systemPath>
|
||||||
|
<classifier>native-all</classifier>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-io -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.commons</groupId>
|
||||||
|
<artifactId>commons-io</artifactId>
|
||||||
|
<version>1.3.2</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
</dependencies>
|
||||||
</project>
|
</project>
|
|
@ -1,12 +1,16 @@
|
||||||
import model.LineModel;
|
import model.LineModel;
|
||||||
|
|
||||||
|
import org.apache.commons.io.IOUtils;
|
||||||
import org.opencv.core.Core;
|
import org.opencv.core.Core;
|
||||||
import presenter.Presenter;
|
import presenter.Presenter;
|
||||||
import presenter.evaluation.PictureProcessor;
|
|
||||||
import view.MainFrame;
|
import view.MainFrame;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementierung verschiedener Algorithmen zur Berechnung von Ausgleichsgeraden.
|
* Implementierung verschiedener Algorithmen zur Berechnung von Ausgleichsgeraden.
|
||||||
|
@ -17,7 +21,33 @@ import java.lang.reflect.InvocationTargetException;
|
||||||
*/
|
*/
|
||||||
public class App {
|
public class App {
|
||||||
|
|
||||||
static {System.loadLibrary(Core.NATIVE_LIBRARY_NAME);}
|
|
||||||
|
|
||||||
|
private static void loadLibrary() {
|
||||||
|
try {
|
||||||
|
InputStream in = null;
|
||||||
|
File fileOut = null;
|
||||||
|
String osName = System.getProperty("os.name");
|
||||||
|
|
||||||
|
int bitness = Integer.parseInt(System.getProperty("sun.arch.data.model"));
|
||||||
|
if(bitness == 32){
|
||||||
|
in = App.class.getResourceAsStream("/libs/x86/opencv_java2413.dll");
|
||||||
|
fileOut = File.createTempFile("tmp", ".dll");
|
||||||
|
}
|
||||||
|
else if (bitness == 64){
|
||||||
|
in = App.class.getResourceAsStream("/libs/x64/opencv_java2413.dll");
|
||||||
|
fileOut = File.createTempFile("tmp", ".dll");
|
||||||
|
}
|
||||||
|
|
||||||
|
OutputStream out = new FileOutputStream(fileOut);
|
||||||
|
IOUtils.copy(in, out);
|
||||||
|
in.close();
|
||||||
|
out.close();
|
||||||
|
System.load(fileOut.toString());
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException("Failed to load opencv native library", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static void setUIFont(javax.swing.plaf.FontUIResource f) {
|
private static void setUIFont(javax.swing.plaf.FontUIResource f) {
|
||||||
java.util.Enumeration<Object> keys = UIManager.getDefaults().keys();
|
java.util.Enumeration<Object> keys = UIManager.getDefaults().keys();
|
||||||
|
@ -32,10 +62,10 @@ public class App {
|
||||||
|
|
||||||
private static void setLookAndFeel(JFrame view) {
|
private static void setLookAndFeel(JFrame view) {
|
||||||
String[] laf = {"com.jtattoo.plaf.aluminium.AluminiumLookAndFeel",
|
String[] laf = {"com.jtattoo.plaf.aluminium.AluminiumLookAndFeel",
|
||||||
"com.jtattoo.plaf.acryl.AcrylLookAndFeel",
|
"com.jtattoo.plaf.acryl.AcrylLookAndFeel",
|
||||||
"com.jtattoo.plaf.aero.AeroLookAndFeel",
|
"com.jtattoo.plaf.aero.AeroLookAndFeel",
|
||||||
"com.jtattoo.plaf.fast.FastLookAndFeel",
|
"com.jtattoo.plaf.fast.FastLookAndFeel",
|
||||||
"com.jtattoo.plaf.graphite.GraphiteLookAndFeel"};
|
"com.jtattoo.plaf.graphite.GraphiteLookAndFeel"};
|
||||||
try {
|
try {
|
||||||
UIManager.setLookAndFeel(laf[4]);
|
UIManager.setLookAndFeel(laf[4]);
|
||||||
} catch (ClassNotFoundException e) {
|
} catch (ClassNotFoundException e) {
|
||||||
|
@ -51,6 +81,7 @@ public class App {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
|
loadLibrary();
|
||||||
|
|
||||||
final Presenter presenter = new Presenter(new LineModel(), null);
|
final Presenter presenter = new Presenter(new LineModel(), null);
|
||||||
|
|
||||||
|
|
|
@ -103,8 +103,8 @@ public class Line {
|
||||||
this.y2 = y2;
|
this.y2 = y2;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean equals(Line other){
|
public boolean equals(Line other) {
|
||||||
if (other.getM() == this.getM() && other.getB() == this.getB()){
|
if (other.getM() == this.getM() && other.getB() == this.getB()) {
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -1,11 +1,7 @@
|
||||||
package model;
|
package model;
|
||||||
|
|
||||||
import sun.awt.image.ImageWatched;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementierung verschiedener Algorithmen zur Berechnung von Ausgleichsgeraden.
|
* Implementierung verschiedener Algorithmen zur Berechnung von Ausgleichsgeraden.
|
||||||
|
@ -90,7 +86,7 @@ public class LineModel {
|
||||||
this.yMaximum = yMaximum;
|
this.yMaximum = yMaximum;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void resetRanges(){
|
public void resetRanges() {
|
||||||
xMinimum = Double.MAX_VALUE;
|
xMinimum = Double.MAX_VALUE;
|
||||||
xMaximum = Double.MIN_VALUE;
|
xMaximum = Double.MIN_VALUE;
|
||||||
yMinimum = Double.MAX_VALUE;
|
yMinimum = Double.MAX_VALUE;
|
||||||
|
|
|
@ -55,8 +55,8 @@ public class Point implements Comparable<Point> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean equals(Point other){
|
public boolean equals(Point other) {
|
||||||
if (other.getX() == this.getX() && other.getY() == this.getY()){
|
if (other.getX() == this.getX() && other.getY() == this.getY()) {
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -1,9 +1,7 @@
|
||||||
package presenter;
|
package presenter;
|
||||||
|
|
||||||
import model.Interval;
|
|
||||||
import model.LineModel;
|
import model.LineModel;
|
||||||
import presenter.algorithms.util.IntersectionComputer;
|
import presenter.algorithms.util.IntersectionComputer;
|
||||||
import presenter.algorithms.util.IntersectionCounter;
|
|
||||||
import presenter.evaluation.EvaluateAlgorithms;
|
import presenter.evaluation.EvaluateAlgorithms;
|
||||||
import view.MainFrame;
|
import view.MainFrame;
|
||||||
|
|
||||||
|
@ -111,8 +109,8 @@ public abstract class AbstractPresenter implements Observer {
|
||||||
getView().enableFunctionality();
|
getView().enableFunctionality();
|
||||||
getView().getProgressDialog().dispose();
|
getView().getProgressDialog().dispose();
|
||||||
getView().logHeading("Import aus Datei");
|
getView().logHeading("Import aus Datei");
|
||||||
getView().log("Anzahl der Geraden: "+ getModel().getLines().size() + ".");
|
getView().log("Anzahl der Geraden: " + getModel().getLines().size() + ".");
|
||||||
getView().log("Anzahl der Schnittpunkte: "+getModel().getNodes().size()+".");
|
getView().log("Anzahl der Schnittpunkte: " + getModel().getNodes().size() + ".");
|
||||||
getView().logSuccess("Import war Erfolgreich! <hr>");
|
getView().logSuccess("Import war Erfolgreich! <hr>");
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
@ -152,8 +150,8 @@ public abstract class AbstractPresenter implements Observer {
|
||||||
SwingUtilities.invokeLater(() -> {
|
SwingUtilities.invokeLater(() -> {
|
||||||
getView().enableFunctionality();
|
getView().enableFunctionality();
|
||||||
getView().logHeading("Import eines Bildes");
|
getView().logHeading("Import eines Bildes");
|
||||||
getView().log("Anzahl der Geraden: "+ getModel().getLines().size() + ".");
|
getView().log("Anzahl der Geraden: " + getModel().getLines().size() + ".");
|
||||||
getView().log("Anzahl der Schnittpunkte: "+getModel().getNodes().size()+".");
|
getView().log("Anzahl der Schnittpunkte: " + getModel().getNodes().size() + ".");
|
||||||
getView().logSuccess("Der Import war Erfolgreich! <hr>");
|
getView().logSuccess("Der Import war Erfolgreich! <hr>");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -161,8 +159,6 @@ public abstract class AbstractPresenter implements Observer {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public void calculateIntersections() {
|
public void calculateIntersections() {
|
||||||
try {
|
try {
|
||||||
Thread thread = new Thread(() -> {
|
Thread thread = new Thread(() -> {
|
||||||
|
|
|
@ -23,7 +23,7 @@ import java.io.File;
|
||||||
* @Email: a_wolf28@uni-muenster.de
|
* @Email: a_wolf28@uni-muenster.de
|
||||||
* @Date: 28.05.2017.
|
* @Date: 28.05.2017.
|
||||||
*/
|
*/
|
||||||
public class Presenter extends AbstractPresenter{
|
public class Presenter extends AbstractPresenter {
|
||||||
|
|
||||||
/* Threads */
|
/* Threads */
|
||||||
private Thread tsThread;
|
private Thread tsThread;
|
||||||
|
@ -118,9 +118,9 @@ public class Presenter extends AbstractPresenter{
|
||||||
public void startImport(File file) {
|
public void startImport(File file) {
|
||||||
if (importThread == null || !importThread.isAlive()) {
|
if (importThread == null || !importThread.isAlive()) {
|
||||||
importThread = new Thread(() -> {
|
importThread = new Thread(() -> {
|
||||||
DataImporter importer = new DataImporter(file, this);
|
DataImporter importer = new DataImporter(file);
|
||||||
importer.addObserver(this);
|
importer.addObserver(this);
|
||||||
importer.run();
|
getModel().setLines(importer.run());
|
||||||
});
|
});
|
||||||
importThread.start();
|
importThread.start();
|
||||||
try {
|
try {
|
||||||
|
@ -131,7 +131,7 @@ public class Presenter extends AbstractPresenter{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void startPictureDataImport(File file){
|
public void startPictureDataImport(File file) {
|
||||||
if (importPictureThread == null || !importPictureThread.isAlive()) {
|
if (importPictureThread == null || !importPictureThread.isAlive()) {
|
||||||
importPictureThread = new Thread(() -> {
|
importPictureThread = new Thread(() -> {
|
||||||
PictureProcessor pictureProcessor = new PictureProcessor(this, file);
|
PictureProcessor pictureProcessor = new PictureProcessor(this, file);
|
||||||
|
@ -147,13 +147,28 @@ public class Presenter extends AbstractPresenter{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void startExport(File file) {
|
public void startExport(File file) {
|
||||||
if (exportThread == null || !exportThread.isAlive()) {
|
if (exportThread == null || !exportThread.isAlive()) {
|
||||||
exportThread = new Thread(() -> {
|
exportThread = new Thread(() -> {
|
||||||
DataExporter exporter = new DataExporter(getModel(), file);
|
DataExporter exporter = new DataExporter(getModel().getLines(), file);
|
||||||
|
exporter.addObserver(this);
|
||||||
|
exporter.export();
|
||||||
|
});
|
||||||
|
exportThread.start();
|
||||||
|
try {
|
||||||
|
exportThread.join();
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void startDatasetExportEvaluation(File file) {
|
||||||
|
if (exportThread == null || !exportThread.isAlive()) {
|
||||||
|
exportThread = new Thread(() -> {
|
||||||
|
DataExporter exporter = new DataExporter(getEval().getData(), file);
|
||||||
exporter.addObserver(this);
|
exporter.addObserver(this);
|
||||||
exporter.export();
|
exporter.export();
|
||||||
});
|
});
|
||||||
|
@ -214,4 +229,20 @@ public class Presenter extends AbstractPresenter{
|
||||||
evalThread.start();
|
evalThread.start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void startEvaluation(int typ, int n, int alg, File file) {
|
||||||
|
|
||||||
|
if (evalThread == null || !evalThread.isAlive()) {
|
||||||
|
evalThread = new Thread(() -> {
|
||||||
|
try {
|
||||||
|
setEval(new EvaluateAlgorithms(typ, n, alg, file));
|
||||||
|
getEval().addObserver(this);
|
||||||
|
getEval().run();
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
evalThread.start();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,13 +23,13 @@ public class NaivLeastMedianOfSquaresEstimator implements Algorithm {
|
||||||
private Double ds, b, m;
|
private Double ds, b, m;
|
||||||
|
|
||||||
public NaivLeastMedianOfSquaresEstimator(LinkedList<Line> lines) {
|
public NaivLeastMedianOfSquaresEstimator(LinkedList<Line> lines) {
|
||||||
for (Line l :lines){
|
for (Line l : lines) {
|
||||||
set.add(new Point(l.getM(),l.getB()));
|
set.add(new Point(l.getM(), l.getB()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void crudeAlg(){
|
private void crudeAlg() {
|
||||||
ds = Double.MAX_VALUE;
|
ds = Double.MAX_VALUE;
|
||||||
b = 0d;
|
b = 0d;
|
||||||
m = 0d;
|
m = 0d;
|
||||||
|
@ -37,21 +37,21 @@ public class NaivLeastMedianOfSquaresEstimator implements Algorithm {
|
||||||
Double beta;
|
Double beta;
|
||||||
Double alpha;
|
Double alpha;
|
||||||
Double dijk;
|
Double dijk;
|
||||||
for (Point i : set){
|
for (Point i : set) {
|
||||||
for (Point j : set) {
|
for (Point j : set) {
|
||||||
for (Point k : set){
|
for (Point k : set) {
|
||||||
triple.add(i);
|
triple.add(i);
|
||||||
triple.add(j);
|
triple.add(j);
|
||||||
triple.add(k);
|
triple.add(k);
|
||||||
Collections.sort(triple);
|
Collections.sort(triple);
|
||||||
beta = (triple.get(0).getY() - triple.get(2).getY()) / (triple.get(0).getX() - triple.get(2).getX());
|
beta = (triple.get(0).getY() - triple.get(2).getY()) / (triple.get(0).getX() - triple.get(2).getX());
|
||||||
alpha = (triple.get(1).getY() + triple.get(2).getY() - ( beta * (triple.get(1).getX() + triple.get(2).getX()))) / 2f;
|
alpha = (triple.get(1).getY() + triple.get(2).getY() - (beta * (triple.get(1).getX() + triple.get(2).getX()))) / 2f;
|
||||||
dijk = f(alpha, beta);
|
dijk = f(alpha, beta);
|
||||||
if (dijk < ds){
|
if (dijk < ds) {
|
||||||
ds = dijk;
|
ds = dijk;
|
||||||
b = alpha;
|
b = alpha;
|
||||||
m = beta;
|
m = beta;
|
||||||
// System.out.printf("Distanz: %6.2f\tAlpha: %6.2f\tBeta: %6.2f",ds,b,m);
|
// System.out.printf("Distanz: %6.2f\tAlpha: %6.2f\tBeta: %6.2f",ds,b,m);
|
||||||
}
|
}
|
||||||
triple.clear();
|
triple.clear();
|
||||||
}
|
}
|
||||||
|
@ -61,13 +61,12 @@ public class NaivLeastMedianOfSquaresEstimator implements Algorithm {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private Double f(Double a, Double b) {
|
||||||
private Double f(Double a, Double b){
|
|
||||||
ArrayList<Double> res = new ArrayList<>();
|
ArrayList<Double> res = new ArrayList<>();
|
||||||
for (Point p : set){
|
for (Point p : set) {
|
||||||
res.add(Math.abs(p.getY() - (a + b * p.getX())));
|
res.add(Math.abs(p.getY() - (a + b * p.getX())));
|
||||||
}
|
}
|
||||||
return FastElementSelector.randomizedSelect(res, res.size()/2);
|
return FastElementSelector.randomizedSelect(res, res.size() / 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -16,7 +16,7 @@ import java.util.LinkedList;
|
||||||
* @Email: a_wolf28@uni-muenster.de
|
* @Email: a_wolf28@uni-muenster.de
|
||||||
* @Date: 15.09.2017.
|
* @Date: 15.09.2017.
|
||||||
*/
|
*/
|
||||||
public class NaivRepeatedMedianEstimator implements Algorithm{
|
public class NaivRepeatedMedianEstimator implements Algorithm {
|
||||||
|
|
||||||
private LinkedList<Line> lines;
|
private LinkedList<Line> lines;
|
||||||
private HashMap<String, ArrayList<Double>> slopesPerLine;
|
private HashMap<String, ArrayList<Double>> slopesPerLine;
|
||||||
|
@ -36,7 +36,7 @@ public class NaivRepeatedMedianEstimator implements Algorithm{
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
//init the List for the slopes
|
//init the List for the slopes
|
||||||
for (int j=0;j<lines.size();j++) {
|
for (int j = 0; j < lines.size(); j++) {
|
||||||
Line leq = lines.get(j);
|
Line leq = lines.get(j);
|
||||||
if (slopesPerLine.get(leq.getId()) == null) {
|
if (slopesPerLine.get(leq.getId()) == null) {
|
||||||
slopesPerLine.put(leq.getId(), new ArrayList<>());
|
slopesPerLine.put(leq.getId(), new ArrayList<>());
|
||||||
|
@ -49,8 +49,8 @@ public class NaivRepeatedMedianEstimator implements Algorithm{
|
||||||
|
|
||||||
//calculate all slopes for each line
|
//calculate all slopes for each line
|
||||||
Point ret;
|
Point ret;
|
||||||
for (int i=0;i<lines.size();i++) {
|
for (int i = 0; i < lines.size(); i++) {
|
||||||
for (int j=i+1;j<lines.size();j++){
|
for (int j = i + 1; j < lines.size(); j++) {
|
||||||
ret = calculateSlope(lines.get(i), lines.get(j));
|
ret = calculateSlope(lines.get(i), lines.get(j));
|
||||||
slopesPerLine.get(lines.get(i).getId()).add(ret.getX());
|
slopesPerLine.get(lines.get(i).getId()).add(ret.getX());
|
||||||
interceptPerLine.get(lines.get(i).getId()).add(ret.getY());
|
interceptPerLine.get(lines.get(i).getId()).add(ret.getY());
|
||||||
|
@ -77,8 +77,8 @@ public class NaivRepeatedMedianEstimator implements Algorithm{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
medianX = FastElementSelector.randomizedSelect(xMedians, xMedians.size()/2);
|
medianX = FastElementSelector.randomizedSelect(xMedians, xMedians.size() / 2);
|
||||||
medianY = FastElementSelector.randomizedSelect(yMedians, yMedians.size()/2);
|
medianY = FastElementSelector.randomizedSelect(yMedians, yMedians.size() / 2);
|
||||||
System.out.printf("Naiv RM: %6.2f * x + %6.2f \n", medianX, medianY);
|
System.out.printf("Naiv RM: %6.2f * x + %6.2f \n", medianX, medianY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -87,13 +87,13 @@ public class NaivRepeatedMedianEstimator implements Algorithm{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Point calculateSlope(Line lineA, Line lineB){
|
private Point calculateSlope(Line lineA, Line lineB) {
|
||||||
Double xi;
|
Double xi;
|
||||||
Double xj;
|
Double xj;
|
||||||
Double yi;
|
Double yi;
|
||||||
Double yj;
|
Double yj;
|
||||||
|
|
||||||
if (lineB.getM() > lineA.getM()){
|
if (lineB.getM() > lineA.getM()) {
|
||||||
xi = lineA.getM();
|
xi = lineA.getM();
|
||||||
yi = lineA.getB();
|
yi = lineA.getB();
|
||||||
xj = lineB.getM();
|
xj = lineB.getM();
|
||||||
|
@ -106,9 +106,9 @@ public class NaivRepeatedMedianEstimator implements Algorithm{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Double m = (yj - yi) / (xj -xi);
|
Double m = (yj - yi) / (xj - xi);
|
||||||
Double b = ((xj * yi) - (xi * yj)) / (xj - xi);
|
Double b = ((xj * yi) - (xi * yj)) / (xj - xi);
|
||||||
return new Point(m,b);
|
return new Point(m, b);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Double getM() {
|
public Double getM() {
|
||||||
|
|
|
@ -48,15 +48,15 @@ public class NaivTheilSenEstimator implements Algorithm {
|
||||||
|
|
||||||
ArrayList<Double> list1 = new ArrayList<>();
|
ArrayList<Double> list1 = new ArrayList<>();
|
||||||
ArrayList<Double> list2 = new ArrayList<>();
|
ArrayList<Double> list2 = new ArrayList<>();
|
||||||
for (int i=0;i<lines.size();i++){
|
for (int i = 0; i < lines.size(); i++) {
|
||||||
list1.add(lines.get(i).getM());
|
list1.add(lines.get(i).getM());
|
||||||
list2.add(lines.get(i).getB());
|
list2.add(lines.get(i).getB());
|
||||||
}
|
}
|
||||||
Double median1 = FastElementSelector.randomizedSelect(list1, list1.size()/2);
|
Double median1 = FastElementSelector.randomizedSelect(list1, list1.size() / 2);
|
||||||
Double median2 = FastElementSelector.randomizedSelect(list2, list2.size()/2);
|
Double median2 = FastElementSelector.randomizedSelect(list2, list2.size() / 2);
|
||||||
slope = FastElementSelector.randomizedSelect(slopesList, slopesList.size()/2);
|
slope = FastElementSelector.randomizedSelect(slopesList, slopesList.size() / 2);
|
||||||
yInterception = median2 - slope * median1;
|
yInterception = median2 - slope * median1;
|
||||||
System.out.printf("Naiv TS: %6.2f * x + %6.3f\n",slope, yInterception);
|
System.out.printf("Naiv TS: %6.2f * x + %6.3f\n", slope, yInterception);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package presenter.algorithms.util;
|
package presenter.algorithms.util;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
|
@ -41,7 +41,7 @@ public class IntersectionComputer {
|
||||||
yMaximum = Double.MIN_VALUE;
|
yMaximum = Double.MIN_VALUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ArrayList<Point> compute(){
|
public ArrayList<Point> compute() {
|
||||||
|
|
||||||
if (lines.size() >= 12) {
|
if (lines.size() >= 12) {
|
||||||
worker[0] = new Thread(() -> {
|
worker[0] = new Thread(() -> {
|
||||||
|
@ -77,12 +77,12 @@ public class IntersectionComputer {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized void work(List<Line> lines){
|
private synchronized void work(List<Line> lines) {
|
||||||
IntersectionCounter counter = new IntersectionCounter();
|
IntersectionCounter counter = new IntersectionCounter();
|
||||||
counter.run(lines, new Interval(-99999, 99999));
|
counter.run(lines, new Interval(-99999, 99999));
|
||||||
ArrayList<Point> points = counter.calculateIntersectionAbscissas();
|
ArrayList<Point> points = counter.calculateIntersectionAbscissas();
|
||||||
for (Point p :points){
|
for (Point p : points) {
|
||||||
if (!isFound(p)){
|
if (!isFound(p)) {
|
||||||
addIntersection(p);
|
addIntersection(p);
|
||||||
setRanges(p);
|
setRanges(p);
|
||||||
}
|
}
|
||||||
|
@ -94,19 +94,19 @@ public class IntersectionComputer {
|
||||||
return lines;
|
return lines;
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void addIntersection(Point p){
|
public synchronized void addIntersection(Point p) {
|
||||||
this.intersections.add(p);
|
this.intersections.add(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized boolean isFound(Point p){
|
public synchronized boolean isFound(Point p) {
|
||||||
if (intersections.contains(p)){
|
if (intersections.contains(p)) {
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void setRanges(Point point){
|
public synchronized void setRanges(Point point) {
|
||||||
xMaximum = (point.getX() > xMaximum) ? point.getX() : xMaximum;
|
xMaximum = (point.getX() > xMaximum) ? point.getX() : xMaximum;
|
||||||
xMinimum = (point.getX() < xMinimum) ? point.getX() : xMinimum;
|
xMinimum = (point.getX() < xMinimum) ? point.getX() : xMinimum;
|
||||||
yMaximum = (point.getY() > yMaximum) ? point.getY() : yMaximum;
|
yMaximum = (point.getY() > yMaximum) ? point.getY() : yMaximum;
|
||||||
|
|
|
@ -4,15 +4,17 @@ import model.Interval;
|
||||||
import model.Line;
|
import model.Line;
|
||||||
import model.LineModel;
|
import model.LineModel;
|
||||||
import model.Point;
|
import model.Point;
|
||||||
|
import presenter.algorithms.advanced.LeastMedianOfSquaresEstimator;
|
||||||
|
import presenter.algorithms.advanced.RepeatedMedianEstimator;
|
||||||
|
import presenter.algorithms.advanced.TheilSenEstimator;
|
||||||
import presenter.algorithms.naiv.NaivLeastMedianOfSquaresEstimator;
|
import presenter.algorithms.naiv.NaivLeastMedianOfSquaresEstimator;
|
||||||
import presenter.algorithms.naiv.NaivRepeatedMedianEstimator;
|
import presenter.algorithms.naiv.NaivRepeatedMedianEstimator;
|
||||||
import presenter.algorithms.naiv.NaivTheilSenEstimator;
|
import presenter.algorithms.naiv.NaivTheilSenEstimator;
|
||||||
import presenter.algorithms.util.IntersectionCounter;
|
import presenter.algorithms.util.IntersectionCounter;
|
||||||
import presenter.algorithms.advanced.LeastMedianOfSquaresEstimator;
|
|
||||||
import presenter.algorithms.advanced.RepeatedMedianEstimator;
|
|
||||||
import presenter.algorithms.advanced.TheilSenEstimator;
|
|
||||||
import presenter.generator.DatasetGenerator;
|
import presenter.generator.DatasetGenerator;
|
||||||
|
import presenter.io.DataImporter;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.Observable;
|
import java.util.Observable;
|
||||||
|
@ -45,7 +47,7 @@ public class EvaluateAlgorithms extends Observable {
|
||||||
|
|
||||||
private DatasetGenerator generator;
|
private DatasetGenerator generator;
|
||||||
|
|
||||||
private String[][] names = {{"MSE", "RMSE", "MAE", "MDAE","Steigung","y-Achsenabschnitt", "S-MSE", "S-RMSE", "S-MAE", "S-MDAE", "Brute-force Steigung", "Brute-force y-Achsenabschnitt"}, {"MAPE", "MDAPE", "RMSPE", "RMDSPE","Steigung","y-Achsenabschnitt"}};
|
private String[][] names = {{"MSE", "RMSE", "MAE", "MDAE", "Steigung", "y-Achsenabschnitt", "S-MSE", "S-RMSE", "S-MAE", "S-MDAE", "Brute-force Steigung", "Brute-force y-Achsenabschnitt"}, {"MAPE", "MDAPE", "RMSPE", "RMDSPE", "Steigung", "y-Achsenabschnitt"}};
|
||||||
|
|
||||||
//übergebene Parameter
|
//übergebene Parameter
|
||||||
private int type;
|
private int type;
|
||||||
|
@ -96,6 +98,30 @@ public class EvaluateAlgorithms extends Observable {
|
||||||
tsP = new ArrayList<>(arrangement.getNodes());
|
tsP = new ArrayList<>(arrangement.getNodes());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public EvaluateAlgorithms(int type, int n, int alg, File file) {
|
||||||
|
this.arrangement = new LineModel();
|
||||||
|
|
||||||
|
DataImporter importer = new DataImporter(file);
|
||||||
|
this.arrangement.setLines(importer.run());
|
||||||
|
|
||||||
|
this.type = type;
|
||||||
|
this.iterations = n;
|
||||||
|
this.alg = alg;
|
||||||
|
|
||||||
|
IntersectionCounter counter = new IntersectionCounter();
|
||||||
|
counter.run(arrangement.getLines(), new Interval(-99999, 99999));
|
||||||
|
counter.calculateIntersectionAbscissas(arrangement);
|
||||||
|
|
||||||
|
|
||||||
|
lmsL = new LinkedList<>(arrangement.getLines());
|
||||||
|
rmL = new LinkedList<>(arrangement.getLines());
|
||||||
|
tsL = new LinkedList<>(arrangement.getLines());
|
||||||
|
|
||||||
|
lmsP = new ArrayList<>(arrangement.getNodes());
|
||||||
|
tsP = new ArrayList<>(arrangement.getNodes());
|
||||||
|
}
|
||||||
|
|
||||||
public void run() throws InterruptedException {
|
public void run() throws InterruptedException {
|
||||||
setChanged();
|
setChanged();
|
||||||
String[] msg = {"eval-dataset-generated"};
|
String[] msg = {"eval-dataset-generated"};
|
||||||
|
@ -134,8 +160,8 @@ public class EvaluateAlgorithms extends Observable {
|
||||||
t.join();
|
t.join();
|
||||||
|
|
||||||
result = getScaleDependentMeasure(arrangement.getLines(), lmsRes[0], lmsRes[1]);
|
result = getScaleDependentMeasure(arrangement.getLines(), lmsRes[0], lmsRes[1]);
|
||||||
result.addAll(getScaledErrorBasedMeasure(arrangement.getLines(), lmsRes[0], lmsRes[1],m[0], b[0]));
|
result.addAll(getScaledErrorBasedMeasure(arrangement.getLines(), lmsRes[0], lmsRes[1], m[0], b[0]));
|
||||||
Double[] tmp = {lmsRes[0], lmsRes[1],m[0], b[0]};
|
Double[] tmp = {lmsRes[0], lmsRes[1], m[0], b[0]};
|
||||||
sendPlotLineResults(tmp, 0);
|
sendPlotLineResults(tmp, 0);
|
||||||
} else if (alg == 1) {
|
} else if (alg == 1) {
|
||||||
final double[] m = new double[1];
|
final double[] m = new double[1];
|
||||||
|
@ -149,8 +175,8 @@ public class EvaluateAlgorithms extends Observable {
|
||||||
t.start();
|
t.start();
|
||||||
startRM();
|
startRM();
|
||||||
result = getScaleDependentMeasure(arrangement.getLines(), rmRes[0], rmRes[1]);
|
result = getScaleDependentMeasure(arrangement.getLines(), rmRes[0], rmRes[1]);
|
||||||
result.addAll(getScaledErrorBasedMeasure(arrangement.getLines(), rmRes[0], rmRes[1],m[0], b[0]));
|
result.addAll(getScaledErrorBasedMeasure(arrangement.getLines(), rmRes[0], rmRes[1], m[0], b[0]));
|
||||||
Double[] tmp = {rmRes[0], rmRes[1],m[0], b[0]};
|
Double[] tmp = {rmRes[0], rmRes[1], m[0], b[0]};
|
||||||
sendPlotLineResults(tmp, 1);
|
sendPlotLineResults(tmp, 1);
|
||||||
} else {
|
} else {
|
||||||
final double[] m = new double[1];
|
final double[] m = new double[1];
|
||||||
|
@ -164,8 +190,8 @@ public class EvaluateAlgorithms extends Observable {
|
||||||
t.start();
|
t.start();
|
||||||
startTS();
|
startTS();
|
||||||
result = getScaleDependentMeasure(arrangement.getLines(), tsRes[0], tsRes[1]);
|
result = getScaleDependentMeasure(arrangement.getLines(), tsRes[0], tsRes[1]);
|
||||||
result.addAll(getScaledErrorBasedMeasure(arrangement.getLines(), tsRes[0], tsRes[1],m[0], b[0]));
|
result.addAll(getScaledErrorBasedMeasure(arrangement.getLines(), tsRes[0], tsRes[1], m[0], b[0]));
|
||||||
Double[] tmp = {tsRes[0], tsRes[1],m[0], b[0]};
|
Double[] tmp = {tsRes[0], tsRes[1], m[0], b[0]};
|
||||||
sendPlotLineResults(tmp, 2);
|
sendPlotLineResults(tmp, 2);
|
||||||
}
|
}
|
||||||
sendTableApproximationTypes();
|
sendTableApproximationTypes();
|
||||||
|
@ -186,7 +212,7 @@ public class EvaluateAlgorithms extends Observable {
|
||||||
lineRes = new ArrayList<>();
|
lineRes = new ArrayList<>();
|
||||||
lineRes.add(lmsRes);
|
lineRes.add(lmsRes);
|
||||||
lineRes.add(rmRes);
|
lineRes.add(rmRes);
|
||||||
sendPloteLineResults(lineRes, new Integer[]{0,1});
|
sendPloteLineResults(lineRes, new Integer[]{0, 1});
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
|
@ -298,7 +324,7 @@ public class EvaluateAlgorithms extends Observable {
|
||||||
lines.add("lines-res");
|
lines.add("lines-res");
|
||||||
lines.add("" + alg);
|
lines.add("" + alg);
|
||||||
//lms res
|
//lms res
|
||||||
for (int i=0;i<res.length;i++) {
|
for (int i = 0; i < res.length; i++) {
|
||||||
lines.add(res[i] + "");
|
lines.add(res[i] + "");
|
||||||
}
|
}
|
||||||
setChanged();
|
setChanged();
|
||||||
|
@ -322,7 +348,7 @@ public class EvaluateAlgorithms extends Observable {
|
||||||
public void startLMS() throws InterruptedException {
|
public void startLMS() throws InterruptedException {
|
||||||
|
|
||||||
lmsThread = new Thread(() -> {
|
lmsThread = new Thread(() -> {
|
||||||
LeastMedianOfSquaresEstimator lmsAlg = new LeastMedianOfSquaresEstimator(lmsL,lmsP);
|
LeastMedianOfSquaresEstimator lmsAlg = new LeastMedianOfSquaresEstimator(lmsL, lmsP);
|
||||||
lmsAlg.run();
|
lmsAlg.run();
|
||||||
lmsAlg.getResult();
|
lmsAlg.getResult();
|
||||||
lmsRes[0] = lmsAlg.getSlope();
|
lmsRes[0] = lmsAlg.getSlope();
|
||||||
|
@ -347,7 +373,7 @@ public class EvaluateAlgorithms extends Observable {
|
||||||
|
|
||||||
public void startTS() throws InterruptedException {
|
public void startTS() throws InterruptedException {
|
||||||
tsThread = new Thread(() -> {
|
tsThread = new Thread(() -> {
|
||||||
TheilSenEstimator tsAlg = new TheilSenEstimator(tsL,tsP);
|
TheilSenEstimator tsAlg = new TheilSenEstimator(tsL, tsP);
|
||||||
tsAlg.run();
|
tsAlg.run();
|
||||||
tsAlg.getResult();
|
tsAlg.getResult();
|
||||||
tsRes[0] = tsAlg.getSlope();
|
tsRes[0] = tsAlg.getSlope();
|
||||||
|
@ -358,7 +384,6 @@ public class EvaluateAlgorithms extends Observable {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public ArrayList<String> getScaleDependentMeasure(final LinkedList<Line> lines, final Double m, final Double b) {
|
public ArrayList<String> getScaleDependentMeasure(final LinkedList<Line> lines, final Double m, final Double b) {
|
||||||
ScaleDependentMeasure scaleDependentMeasure = new ScaleDependentMeasure(lines, m, b);
|
ScaleDependentMeasure scaleDependentMeasure = new ScaleDependentMeasure(lines, m, b);
|
||||||
ArrayList<String> ret = new ArrayList<>();
|
ArrayList<String> ret = new ArrayList<>();
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
package presenter.evaluation;
|
package presenter.evaluation;
|
||||||
import jdk.nashorn.internal.scripts.JD;
|
|
||||||
import model.Line;
|
import model.Line;
|
||||||
import org.opencv.core.*;
|
import org.opencv.core.*;
|
||||||
import org.opencv.highgui.*;
|
import org.opencv.highgui.Highgui;
|
||||||
import org.opencv.imgproc.Imgproc;
|
import org.opencv.imgproc.Imgproc;
|
||||||
import presenter.Presenter;
|
import presenter.Presenter;
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ import java.util.Observable;
|
||||||
* @Email: a_wolf28@uni-muenster.de
|
* @Email: a_wolf28@uni-muenster.de
|
||||||
* @Date: 17.09.2017.
|
* @Date: 17.09.2017.
|
||||||
*/
|
*/
|
||||||
public class PictureProcessor extends Observable{
|
public class PictureProcessor extends Observable {
|
||||||
|
|
||||||
private Mat image;
|
private Mat image;
|
||||||
private Mat contour;
|
private Mat contour;
|
||||||
|
@ -29,43 +29,43 @@ public class PictureProcessor extends Observable{
|
||||||
private ArrayList<MatOfPoint> contours;
|
private ArrayList<MatOfPoint> contours;
|
||||||
private double contourLength;
|
private double contourLength;
|
||||||
|
|
||||||
public PictureProcessor(Presenter presenter, File file) {
|
public PictureProcessor(Presenter presenter, File file) {
|
||||||
this.file = file;
|
this.file = file;
|
||||||
this.presenter = presenter;
|
this.presenter = presenter;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void run(){
|
public void run() {
|
||||||
image = Highgui.imread(file.getAbsolutePath());
|
image = Highgui.imread(file.getAbsolutePath());
|
||||||
contour = process(image);
|
contour = process(image);
|
||||||
contourLength = image.width() * 0.3;
|
contourLength = image.width() * 0.3;
|
||||||
createInputData();
|
createInputData();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Mat process(Mat image){
|
private Mat process(Mat image) {
|
||||||
Mat threshold = new Mat(image.width(), image.height(), CvType.CV_8UC1);
|
Mat threshold = new Mat(image.width(), image.height(), CvType.CV_8UC1);
|
||||||
Mat source = new Mat(image.width(), image.height(), CvType.CV_8UC1);
|
Mat source = new Mat(image.width(), image.height(), CvType.CV_8UC1);
|
||||||
Imgproc.cvtColor(image, source, Imgproc.COLOR_BGR2GRAY);
|
Imgproc.cvtColor(image, source, Imgproc.COLOR_BGR2GRAY);
|
||||||
Imgproc.GaussianBlur(source, threshold, new Size(3,3),0,0);
|
Imgproc.GaussianBlur(source, threshold, new Size(3, 3), 0, 0);
|
||||||
Imgproc.Canny(threshold, source,300,600,5,true);
|
Imgproc.Canny(threshold, source, 300, 600, 5, true);
|
||||||
//Konturen berechnen und filtern
|
//Konturen berechnen und filtern
|
||||||
contours = new ArrayList<>();
|
contours = new ArrayList<>();
|
||||||
Imgproc.findContours(source, contours, new Mat(), Imgproc.RETR_TREE, Imgproc.CHAIN_APPROX_SIMPLE, new Point(0,0));
|
Imgproc.findContours(source, contours, new Mat(), Imgproc.RETR_TREE, Imgproc.CHAIN_APPROX_SIMPLE, new Point(0, 0));
|
||||||
Mat viscont = new Mat(source.size(), source.type());
|
Mat viscont = new Mat(source.size(), source.type());
|
||||||
double minArea = 50;
|
double minArea = 50;
|
||||||
double maxArea = 0.2 * image.cols() * image.rows();
|
double maxArea = 0.2 * image.cols() * image.rows();
|
||||||
for (int i=0;i<contours.size();i++) {
|
for (int i = 0; i < contours.size(); i++) {
|
||||||
double acutualArea = Imgproc.contourArea(contours.get(i));
|
double acutualArea = Imgproc.contourArea(contours.get(i));
|
||||||
if (minArea < acutualArea && maxArea > acutualArea) {
|
if (minArea < acutualArea && maxArea > acutualArea) {
|
||||||
Imgproc.drawContours(viscont, contours, i, new Scalar(255, 0, 0), 1);
|
Imgproc.drawContours(viscont, contours, i, new Scalar(255, 0, 0), 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Mat resized = new Mat();
|
Mat resized = new Mat();
|
||||||
Imgproc.resize(viscont, resized,new Size(560,560));
|
Imgproc.resize(viscont, resized, new Size(560, 560));
|
||||||
SwingUtilities.invokeLater(() -> {
|
SwingUtilities.invokeLater(() -> {
|
||||||
JDialog dialog = new JDialog();
|
JDialog dialog = new JDialog();
|
||||||
dialog.setSize(560,560);
|
dialog.setSize(560, 560);
|
||||||
JLabel label = new JLabel();
|
JLabel label = new JLabel();
|
||||||
label.setSize(560,560);
|
label.setSize(560, 560);
|
||||||
label.setIcon(new ImageIcon(toBufferedImage(resized)));
|
label.setIcon(new ImageIcon(toBufferedImage(resized)));
|
||||||
dialog.add(label);
|
dialog.add(label);
|
||||||
dialog.setVisible(true);
|
dialog.setVisible(true);
|
||||||
|
@ -89,12 +89,12 @@ public class PictureProcessor extends Observable{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createInputData(){
|
private void createInputData() {
|
||||||
Thread t = new Thread(() -> {
|
Thread t = new Thread(() -> {
|
||||||
double minArea = 50;
|
double minArea = 50;
|
||||||
double maxArea = 0.2 * image.cols() * image.rows();
|
double maxArea = 0.2 * image.cols() * image.rows();
|
||||||
int id = 0;
|
int id = 0;
|
||||||
for (int j=0;j<contours.size();j++){
|
for (int j = 0; j < contours.size(); j++) {
|
||||||
Point[] p = contours.get(j).toArray();
|
Point[] p = contours.get(j).toArray();
|
||||||
double acutualArea = Imgproc.contourArea(contours.get(j));
|
double acutualArea = Imgproc.contourArea(contours.get(j));
|
||||||
if (minArea < acutualArea && maxArea > acutualArea) {
|
if (minArea < acutualArea && maxArea > acutualArea) {
|
||||||
|
|
|
@ -37,7 +37,7 @@ public class ScaledErrorBasedMeasure {
|
||||||
sampsonError.add(e);
|
sampsonError.add(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i=0;i<sampsonError.size();i++){
|
for (int i = 0; i < sampsonError.size(); i++) {
|
||||||
scaledError.add(sampsonError.get(i) / naivSampsonError.get(i));
|
scaledError.add(sampsonError.get(i) / naivSampsonError.get(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
package presenter.io;
|
package presenter.io;
|
||||||
|
|
||||||
|
import com.opencsv.CSVWriter;
|
||||||
import model.Line;
|
import model.Line;
|
||||||
import model.LineModel;
|
import model.LineModel;
|
||||||
import com.opencsv.CSVWriter;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileWriter;
|
import java.io.FileWriter;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.LinkedList;
|
||||||
import java.util.Observable;
|
import java.util.Observable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -18,12 +19,12 @@ import java.util.Observable;
|
||||||
*/
|
*/
|
||||||
public class DataExporter extends Observable {
|
public class DataExporter extends Observable {
|
||||||
|
|
||||||
private LineModel lineModel;
|
private LinkedList<Line> lines;
|
||||||
private File file;
|
private File file;
|
||||||
|
|
||||||
public DataExporter(LineModel model, File file) {
|
public DataExporter(LinkedList<Line> lines, File file) {
|
||||||
this.file = file;
|
this.file = file;
|
||||||
this.lineModel = model;
|
this.lines = lines;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void export() {
|
public void export() {
|
||||||
|
@ -33,7 +34,7 @@ public class DataExporter extends Observable {
|
||||||
writer = new CSVWriter(new FileWriter(file), ',');
|
writer = new CSVWriter(new FileWriter(file), ',');
|
||||||
// feed in your array (or convert your data to an array)
|
// feed in your array (or convert your data to an array)
|
||||||
String[] entries = new String[3];
|
String[] entries = new String[3];
|
||||||
for (Line line : lineModel.getLines()) {
|
for (Line line : lines) {
|
||||||
entries[0] = line.getId();
|
entries[0] = line.getId();
|
||||||
entries[1] = line.getM().toString();
|
entries[1] = line.getM().toString();
|
||||||
Double tmp = (-1) * line.getB();
|
Double tmp = (-1) * line.getB();
|
||||||
|
|
|
@ -1,14 +1,15 @@
|
||||||
package presenter.io;
|
package presenter.io;
|
||||||
|
|
||||||
|
import com.opencsv.CSVReader;
|
||||||
import model.Line;
|
import model.Line;
|
||||||
import model.LineModel;
|
import model.LineModel;
|
||||||
import presenter.Presenter;
|
import presenter.Presenter;
|
||||||
import com.opencsv.CSVReader;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
import java.io.FileReader;
|
import java.io.FileReader;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Observable;
|
import java.util.Observable;
|
||||||
|
|
||||||
|
@ -24,17 +25,10 @@ public class DataImporter extends Observable {
|
||||||
|
|
||||||
private File file;
|
private File file;
|
||||||
private CSVReader reader;
|
private CSVReader reader;
|
||||||
private LineModel model;
|
|
||||||
private Presenter presenter;
|
|
||||||
|
|
||||||
|
|
||||||
public DataImporter(File file, Presenter presenter) {
|
public DataImporter(File file) {
|
||||||
this.model = new LineModel();
|
|
||||||
this.presenter = presenter;
|
|
||||||
this.presenter.setModel(this.model);
|
|
||||||
//System.out.println(this.model.getLines().size()+ " die Anzahl der aktuellen Lines.");
|
//System.out.println(this.model.getLines().size()+ " die Anzahl der aktuellen Lines.");
|
||||||
|
|
||||||
|
|
||||||
this.file = file;
|
this.file = file;
|
||||||
try {
|
try {
|
||||||
|
|
||||||
|
@ -44,8 +38,9 @@ public class DataImporter extends Observable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void run() {
|
public LinkedList<Line> run() {
|
||||||
|
|
||||||
|
LinkedList<Line> list = new LinkedList<>();
|
||||||
try {
|
try {
|
||||||
List<String[]> lines = reader.readAll();
|
List<String[]> lines = reader.readAll();
|
||||||
int counter = 0;
|
int counter = 0;
|
||||||
|
@ -57,8 +52,8 @@ public class DataImporter extends Observable {
|
||||||
Double y = Double.parseDouble(nextLine[2]) * (-1);
|
Double y = Double.parseDouble(nextLine[2]) * (-1);
|
||||||
Line line = new Line(x, y);
|
Line line = new Line(x, y);
|
||||||
line.setId(counter + "");
|
line.setId(counter + "");
|
||||||
if (!this.presenter.getModel().getLines().contains(line)) {
|
if (!list.contains(line)) {
|
||||||
this.presenter.getModel().addLine(line);
|
list.add(line);
|
||||||
}
|
}
|
||||||
//System.out.format("|\t\t\t\t\t %-11d \t|\t\t\t\t\t %-11f \t|\t\t\t\t\t %-11f \t\t\t\t\t|\n", id,x,y);
|
//System.out.format("|\t\t\t\t\t %-11d \t|\t\t\t\t\t %-11f \t|\t\t\t\t\t %-11f \t\t\t\t\t|\n", id,x,y);
|
||||||
setChanged();
|
setChanged();
|
||||||
|
@ -74,6 +69,7 @@ public class DataImporter extends Observable {
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,10 @@ import model.Line;
|
||||||
import presenter.AbstractPresenter;
|
import presenter.AbstractPresenter;
|
||||||
import presenter.Presenter;
|
import presenter.Presenter;
|
||||||
import view.listener.*;
|
import view.listener.*;
|
||||||
import view.panels.*;
|
import view.panels.DualityPanel;
|
||||||
|
import view.panels.EvaluationPanel;
|
||||||
|
import view.panels.InfoPanel;
|
||||||
|
import view.panels.PlotPanel;
|
||||||
import view.panels.tabs.LMSPanel;
|
import view.panels.tabs.LMSPanel;
|
||||||
import view.panels.tabs.RMPanel;
|
import view.panels.tabs.RMPanel;
|
||||||
import view.panels.tabs.TSPanel;
|
import view.panels.tabs.TSPanel;
|
||||||
|
@ -282,7 +285,7 @@ public class MainFrame extends JFrame {
|
||||||
|
|
||||||
private void setDimensions() {
|
private void setDimensions() {
|
||||||
this.setExtendedState(JFrame.MAXIMIZED_BOTH);
|
this.setExtendedState(JFrame.MAXIMIZED_BOTH);
|
||||||
this.setMinimumSize(new Dimension(1024,768));
|
this.setMinimumSize(new Dimension(1024, 768));
|
||||||
this.setResizable(true);
|
this.setResizable(true);
|
||||||
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
|
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
|
||||||
this.setMaximizedBounds(env.getMaximumWindowBounds());
|
this.setMaximizedBounds(env.getMaximumWindowBounds());
|
||||||
|
@ -360,8 +363,8 @@ public class MainFrame extends JFrame {
|
||||||
lmsPanel.getStartButton().addActionListener(new StartAlgorithmListener(((Presenter) getPresenter()), lmsPanel));
|
lmsPanel.getStartButton().addActionListener(new StartAlgorithmListener(((Presenter) getPresenter()), lmsPanel));
|
||||||
rmPanel.getStartButton().addActionListener(new StartAlgorithmListener(((Presenter) getPresenter()), rmPanel));
|
rmPanel.getStartButton().addActionListener(new StartAlgorithmListener(((Presenter) getPresenter()), rmPanel));
|
||||||
tsPanel.getStartButton().addActionListener(new StartAlgorithmListener(((Presenter) getPresenter()), tsPanel));
|
tsPanel.getStartButton().addActionListener(new StartAlgorithmListener(((Presenter) getPresenter()), tsPanel));
|
||||||
importButton.addActionListener(new ImportDataListener((Presenter) this.getPresenter() , this));
|
importButton.addActionListener(new ImportDataListener((Presenter) this.getPresenter(), this));
|
||||||
exportButton.addActionListener(new ExportDataListener((Presenter) this.getPresenter() , this));
|
exportButton.addActionListener(new ExportDataListener((Presenter) this.getPresenter(), this));
|
||||||
generateButton.addActionListener(new GenerateDataListener((Presenter) this.getPresenter()));
|
generateButton.addActionListener(new GenerateDataListener((Presenter) this.getPresenter()));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
package view;
|
package view;
|
||||||
|
|
||||||
import presenter.Presenter;
|
import presenter.Presenter;
|
||||||
import view.MainFrame;
|
|
||||||
import view.listener.ExportDataListener;
|
import view.listener.ExportDataListener;
|
||||||
import view.listener.GenerateDataListener;
|
import view.listener.GenerateDataListener;
|
||||||
import view.listener.ImportDataListener;
|
import view.listener.ImportDataListener;
|
||||||
|
@ -9,7 +8,6 @@ import view.listener.PictureImportListener;
|
||||||
import view.panels.AboutPanel;
|
import view.panels.AboutPanel;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import java.awt.*;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementierung verschiedener Algorithmen zur Berechnung von Ausgleichsgeraden.
|
* Implementierung verschiedener Algorithmen zur Berechnung von Ausgleichsgeraden.
|
||||||
|
@ -69,16 +67,20 @@ public class MenuBar {
|
||||||
menuBar.add(aboutMenu);
|
menuBar.add(aboutMenu);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addActionListeners(){
|
public void addActionListeners() {
|
||||||
this.exitItem.addActionListener(e -> {System.exit(0);});
|
this.exitItem.addActionListener(e -> {
|
||||||
this.evaluateItem.addActionListener(e -> {view.showEvauluationDialog();});
|
System.exit(0);
|
||||||
|
});
|
||||||
|
this.evaluateItem.addActionListener(e -> {
|
||||||
|
view.showEvauluationDialog();
|
||||||
|
});
|
||||||
this.importItem.addActionListener(new ImportDataListener((Presenter) view.getPresenter(), view));
|
this.importItem.addActionListener(new ImportDataListener((Presenter) view.getPresenter(), view));
|
||||||
this.exportItem.addActionListener(new ExportDataListener((Presenter) view.getPresenter(), view));
|
this.exportItem.addActionListener(new ExportDataListener((Presenter) view.getPresenter(), view));
|
||||||
this.generateItem.addActionListener(new GenerateDataListener((Presenter) view.getPresenter()));
|
this.generateItem.addActionListener(new GenerateDataListener((Presenter) view.getPresenter()));
|
||||||
this.aboutItem.addActionListener(e -> {
|
this.aboutItem.addActionListener(e -> {
|
||||||
SwingUtilities.invokeLater(() -> {
|
SwingUtilities.invokeLater(() -> {
|
||||||
JDialog dialog = new JDialog();
|
JDialog dialog = new JDialog();
|
||||||
dialog.setSize(410,420);
|
dialog.setSize(410, 420);
|
||||||
dialog.setResizable(false);
|
dialog.setResizable(false);
|
||||||
dialog.add(new AboutPanel());
|
dialog.add(new AboutPanel());
|
||||||
dialog.setVisible(true);
|
dialog.setVisible(true);
|
||||||
|
|
|
@ -33,7 +33,7 @@ public class ExportDataListener implements ActionListener {
|
||||||
File file = null;
|
File file = null;
|
||||||
JFileChooser chooser = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory());
|
JFileChooser chooser = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory());
|
||||||
chooser.setPreferredSize(new Dimension(800, 700));
|
chooser.setPreferredSize(new Dimension(800, 700));
|
||||||
chooser.setFileFilter(new FileNameExtensionFilter("Comma-Separated Value", "csv", "text"));
|
chooser.setFileFilter(new FileNameExtensionFilter("Comma-Separated Value, (*.csv)", "csv", "text"));
|
||||||
chooser.setMultiSelectionEnabled(false);
|
chooser.setMultiSelectionEnabled(false);
|
||||||
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
|
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,6 @@ package view.listener;
|
||||||
|
|
||||||
import presenter.Presenter;
|
import presenter.Presenter;
|
||||||
|
|
||||||
import javax.swing.*;
|
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,7 @@ public class ImportDataListener implements ActionListener {
|
||||||
File file = null;
|
File file = null;
|
||||||
JFileChooser chooser = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory());
|
JFileChooser chooser = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory());
|
||||||
chooser.setPreferredSize(new Dimension(800, 700));
|
chooser.setPreferredSize(new Dimension(800, 700));
|
||||||
chooser.setFileFilter(new FileNameExtensionFilter("Comma-Separated Value", "csv", "text"));
|
chooser.setFileFilter(new FileNameExtensionFilter("Comma-Separated Value, (*.csv)", "csv", "text"));
|
||||||
|
|
||||||
chooser.setMultiSelectionEnabled(false);
|
chooser.setMultiSelectionEnabled(false);
|
||||||
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
|
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
|
||||||
|
|
|
@ -32,7 +32,7 @@ public class PictureImportListener implements ActionListener {
|
||||||
File file = null;
|
File file = null;
|
||||||
JFileChooser chooser = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory());
|
JFileChooser chooser = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory());
|
||||||
chooser.setPreferredSize(new Dimension(800, 700));
|
chooser.setPreferredSize(new Dimension(800, 700));
|
||||||
chooser.setFileFilter(new FileNameExtensionFilter("Bilder", "tiff", "png","jpg","jpeg"));
|
chooser.setFileFilter(new FileNameExtensionFilter("Bilder", "tiff", "png", "jpg", "jpeg"));
|
||||||
|
|
||||||
chooser.setMultiSelectionEnabled(false);
|
chooser.setMultiSelectionEnabled(false);
|
||||||
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
|
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
|
||||||
|
|
|
@ -28,19 +28,19 @@ public class StartAlgorithmListener implements ActionListener {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
if (tabPanel instanceof LMSPanel){
|
if (tabPanel instanceof LMSPanel) {
|
||||||
if ( ((LMSPanel) tabPanel).getInput() != null) {
|
if (((LMSPanel) tabPanel).getInput() != null) {
|
||||||
Thread t = new Thread(
|
Thread t = new Thread(
|
||||||
() -> presenter.calculateLMS(((LMSPanel) tabPanel).getInput()));
|
() -> presenter.calculateLMS(((LMSPanel) tabPanel).getInput()));
|
||||||
t.start();
|
t.start();
|
||||||
}
|
}
|
||||||
} else if (tabPanel instanceof RMPanel){
|
} else if (tabPanel instanceof RMPanel) {
|
||||||
if ( ((RMPanel) tabPanel).getInput() != null) {
|
if (((RMPanel) tabPanel).getInput() != null) {
|
||||||
Thread t = new Thread(
|
Thread t = new Thread(
|
||||||
() -> presenter.calculateRM(((RMPanel) tabPanel).getInput()));
|
() -> presenter.calculateRM(((RMPanel) tabPanel).getInput()));
|
||||||
t.start();
|
t.start();
|
||||||
}
|
}
|
||||||
} else if(tabPanel instanceof TSPanel){
|
} else if (tabPanel instanceof TSPanel) {
|
||||||
Thread t = new Thread(
|
Thread t = new Thread(
|
||||||
() -> presenter.calculateTS(""));
|
() -> presenter.calculateTS(""));
|
||||||
t.start();
|
t.start();
|
||||||
|
|
|
@ -19,14 +19,14 @@ public class AboutPanel extends JPanel {
|
||||||
private JPanel contentPane;
|
private JPanel contentPane;
|
||||||
private ImageIcon image;
|
private ImageIcon image;
|
||||||
|
|
||||||
public AboutPanel(){
|
public AboutPanel() {
|
||||||
super();
|
super();
|
||||||
this.setSize(new Dimension(410,400));
|
this.setSize(new Dimension(410, 400));
|
||||||
this.setLayout(new BorderLayout());
|
this.setLayout(new BorderLayout());
|
||||||
contentPane = new JPanel(new BorderLayout());
|
contentPane = new JPanel(new BorderLayout());
|
||||||
this.textArea = new JTextArea();
|
this.textArea = new JTextArea();
|
||||||
this.textArea.setEditable(false);
|
this.textArea.setEditable(false);
|
||||||
this.textArea.setBackground(new Color(0,0,0,0));
|
this.textArea.setBackground(new Color(0, 0, 0, 0));
|
||||||
contentPane.add(this.textArea, BorderLayout.CENTER);
|
contentPane.add(this.textArea, BorderLayout.CENTER);
|
||||||
ClassLoader classLoader = getClass().getClassLoader();
|
ClassLoader classLoader = getClass().getClassLoader();
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -75,7 +75,7 @@ public class EvaluationPanel extends JPanel {
|
||||||
datasetCountLabel = new JLabel("Größe des Datensatzes");
|
datasetCountLabel = new JLabel("Größe des Datensatzes");
|
||||||
Integer[] choice = {50, 100, 200, 500, 1000, 1500};
|
Integer[] choice = {50, 100, 200, 500, 1000, 1500};
|
||||||
datasetCountChoice = new JComboBox(choice);
|
datasetCountChoice = new JComboBox(choice);
|
||||||
String[] datatypes = {"Punktwolke", "Gerade", "Kreis und Gerade"};
|
String[] datatypes = {"Punktwolke", "Gerade", "Kreis und Gerade", "Import von CSV-Datei"};
|
||||||
datasetType = new JComboBox<>(datatypes);
|
datasetType = new JComboBox<>(datatypes);
|
||||||
|
|
||||||
start = new JButton("Start");
|
start = new JButton("Start");
|
||||||
|
@ -191,7 +191,29 @@ public class EvaluationPanel extends JPanel {
|
||||||
alg = checkSelection();
|
alg = checkSelection();
|
||||||
n = (Integer) datasetCountChoice.getSelectedItem();
|
n = (Integer) datasetCountChoice.getSelectedItem();
|
||||||
String datatyp = (String) datasetType.getSelectedItem();
|
String datatyp = (String) datasetType.getSelectedItem();
|
||||||
((Presenter) view.getPresenter()).startEvaluation(type, n, alg, datatyp);
|
if (datatyp == "Import von CSV-Datei"){
|
||||||
|
SwingUtilities.invokeLater(() -> {
|
||||||
|
File file = null;
|
||||||
|
JFileChooser chooser = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory());
|
||||||
|
chooser.setPreferredSize(new Dimension(800, 700));
|
||||||
|
chooser.setFileFilter(new FileNameExtensionFilter("Comma-Separated Value, (*.csv)", "csv", "text"));
|
||||||
|
|
||||||
|
chooser.setMultiSelectionEnabled(false);
|
||||||
|
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
|
||||||
|
|
||||||
|
|
||||||
|
if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
|
||||||
|
//System.out.println ("Datei "+chooser.getSelectedFile()+ " ausgewählt.");
|
||||||
|
file = chooser.getSelectedFile();
|
||||||
|
final File input = file;
|
||||||
|
Thread t = new Thread(() -> ((Presenter) view.getPresenter()).startEvaluation(type, n, alg, input));
|
||||||
|
t.start();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
} else {
|
||||||
|
((Presenter) view.getPresenter()).startEvaluation(type, n, alg, datatyp);
|
||||||
|
}
|
||||||
clearTable.setEnabled(true);
|
clearTable.setEnabled(true);
|
||||||
latexExport.setEnabled(true);
|
latexExport.setEnabled(true);
|
||||||
exportData.setEnabled(true);
|
exportData.setEnabled(true);
|
||||||
|
@ -224,7 +246,7 @@ public class EvaluationPanel extends JPanel {
|
||||||
File file = null;
|
File file = null;
|
||||||
JFileChooser chooser = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory());
|
JFileChooser chooser = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory());
|
||||||
chooser.setPreferredSize(new Dimension(800, 700));
|
chooser.setPreferredSize(new Dimension(800, 700));
|
||||||
chooser.setFileFilter(new FileNameExtensionFilter("LaTeX-Datei", "tex", "text"));
|
chooser.setFileFilter(new FileNameExtensionFilter("LaTeX-Datei, (*.tex)", "tex", "text"));
|
||||||
|
|
||||||
chooser.setMultiSelectionEnabled(false);
|
chooser.setMultiSelectionEnabled(false);
|
||||||
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
|
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
|
||||||
|
@ -257,7 +279,26 @@ public class EvaluationPanel extends JPanel {
|
||||||
|
|
||||||
exportData.addActionListener(e -> {
|
exportData.addActionListener(e -> {
|
||||||
SwingUtilities.invokeLater(() -> {
|
SwingUtilities.invokeLater(() -> {
|
||||||
JOptionPane.showMessageDialog(this, "Boooooooooooooooooooooooooooooooooooooooooooooooooooooo! :)");
|
SwingUtilities.invokeLater(() -> {
|
||||||
|
File file = null;
|
||||||
|
JFileChooser chooser = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory());
|
||||||
|
chooser.setPreferredSize(new Dimension(800, 700));
|
||||||
|
chooser.setFileFilter(new FileNameExtensionFilter("Comma-Separated Value, (*.csv)", "csv", "text"));
|
||||||
|
|
||||||
|
chooser.setMultiSelectionEnabled(false);
|
||||||
|
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
|
||||||
|
|
||||||
|
|
||||||
|
if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
|
||||||
|
//System.out.println ("Datei "+chooser.getSelectedFile()+ " ausgewählt.");
|
||||||
|
file = chooser.getSelectedFile();
|
||||||
|
String filename = file.getAbsolutePath().contains(".csv") ? file.getAbsolutePath() : file.getAbsolutePath().concat(".csv");
|
||||||
|
File withExtension = new File(filename);
|
||||||
|
final File input = withExtension;
|
||||||
|
Thread t = new Thread(() ->((Presenter) view.getPresenter()).startDatasetExportEvaluation(input));
|
||||||
|
t.start();
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,6 @@
|
||||||
package view.panels.tabs;
|
package view.panels.tabs;
|
||||||
|
|
||||||
import com.sun.istack.internal.Nullable;
|
|
||||||
import view.panels.PlotPanel;
|
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import javax.swing.border.TitledBorder;
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -84,7 +80,6 @@ public class LMSPanel extends TabPanel {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
public String[] getInput() {
|
public String[] getInput() {
|
||||||
String[] input = new String[3];
|
String[] input = new String[3];
|
||||||
input[0] = this.input[0].getText();
|
input[0] = this.input[0].getText();
|
||||||
|
|
|
@ -1,10 +1,6 @@
|
||||||
package view.panels.tabs;
|
package view.panels.tabs;
|
||||||
|
|
||||||
import com.sun.istack.internal.Nullable;
|
|
||||||
import view.panels.PlotPanel;
|
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import javax.swing.border.TitledBorder;
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -77,7 +73,6 @@ public class RMPanel extends TabPanel {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
public String getInput() {
|
public String getInput() {
|
||||||
String input = "";
|
String input = "";
|
||||||
input = this.input.getText();
|
input = this.input.getText();
|
||||||
|
|
|
@ -1,10 +1,6 @@
|
||||||
package view.panels.tabs;
|
package view.panels.tabs;
|
||||||
|
|
||||||
import com.sun.istack.internal.Nullable;
|
|
||||||
import view.panels.PlotPanel;
|
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import javax.swing.border.TitledBorder;
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -13,7 +13,7 @@ import java.awt.*;
|
||||||
* @Email: a_wolf28@uni-muenster.de
|
* @Email: a_wolf28@uni-muenster.de
|
||||||
* @Date: 10.09.2017.
|
* @Date: 10.09.2017.
|
||||||
*/
|
*/
|
||||||
public abstract class TabPanel extends JPanel{
|
public abstract class TabPanel extends JPanel {
|
||||||
|
|
||||||
|
|
||||||
private PlotPanel plotPanel;
|
private PlotPanel plotPanel;
|
||||||
|
@ -41,6 +41,14 @@ public abstract class TabPanel extends JPanel{
|
||||||
this.startButton.setFont(new Font("Verdana", Font.PLAIN, 16));
|
this.startButton.setFont(new Font("Verdana", Font.PLAIN, 16));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void addTextfieldAndInput(int row, String name, Double value) {
|
||||||
|
//muss nicht obligatorisch implementiert werden
|
||||||
|
}
|
||||||
|
|
||||||
|
public PlotPanel getPlotPanel() {
|
||||||
|
return plotPanel;
|
||||||
|
}
|
||||||
|
|
||||||
public void setPlotPanel(PlotPanel plotPanel) {
|
public void setPlotPanel(PlotPanel plotPanel) {
|
||||||
this.plotPanel = plotPanel;
|
this.plotPanel = plotPanel;
|
||||||
if (this.centerPanel.getComponents().length > 0)
|
if (this.centerPanel.getComponents().length > 0)
|
||||||
|
@ -52,14 +60,6 @@ public abstract class TabPanel extends JPanel{
|
||||||
this.revalidate();
|
this.revalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void addTextfieldAndInput(int row, String name, Double value){
|
|
||||||
//muss nicht obligatorisch implementiert werden
|
|
||||||
}
|
|
||||||
|
|
||||||
public PlotPanel getPlotPanel() {
|
|
||||||
return plotPanel;
|
|
||||||
}
|
|
||||||
|
|
||||||
public JButton getStartButton() {
|
public JButton getStartButton() {
|
||||||
return startButton;
|
return startButton;
|
||||||
}
|
}
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 7.3 MiB |
Loading…
Reference in New Issue