algorithms-for-computing-li.../LinearRegressionTool/src/main/java/App.java

137 lines
4.5 KiB
Java

import model.Line;
import model.LineModel;
import model.Point;
import presenter.Presenter;
import presenter.algorithms.advanced.LeastMedianOfSquaresEstimator;
import presenter.algorithms.advanced.RepeatedMedianEstimator;
import presenter.algorithms.advanced.TheilSenEstimator;
import presenter.algorithms.naiv.NaivLeastMedianOfSquaresEstimator;
import presenter.algorithms.naiv.NaivRepeatedMedianEstimator;
import presenter.algorithms.naiv.NaivTheilSenEstimator;
import presenter.generator.DatasetGenerator;
import presenter.util.IntersectionComputer;
import view.MainFrame;
import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;
import java.util.LinkedList;
/**
* Implementierung verschiedener Algorithmen zur Berechnung von Ausgleichsgeraden.
*
* @Author: Armin Wolf
* @Email: a_wolf28@uni-muenster.de
* @Date: 28.05.2017.
*/
public class App {
/**
* Laden der native Library für OpenCV
*/
static {
nu.pattern.OpenCV.loadShared();
System.loadLibrary(org.opencv.core.Core.NATIVE_LIBRARY_NAME);
}
/**
* Schriftart wird neu gesetzt
*
* @param f Schriftart
*/
private static void setUIFont(javax.swing.plaf.FontUIResource f) {
java.util.Enumeration<Object> keys = UIManager.getDefaults().keys();
while (keys.hasMoreElements()) {
Object key = keys.nextElement();
Object value = UIManager.get(key);
if (value instanceof javax.swing.plaf.FontUIResource) {
UIManager.put(key, f);
}
}
}
/**
* Das LookAndFeel wird neu gesetzt.
*
* @param view View Klasse
*/
private static void setLookAndFeel(JFrame view) {
String[] laf = {"com.jtattoo.plaf.aluminium.AluminiumLookAndFeel",
"com.jtattoo.plaf.acryl.AcrylLookAndFeel",
"com.jtattoo.plaf.aero.AeroLookAndFeel",
"com.jtattoo.plaf.fast.FastLookAndFeel",
"com.jtattoo.plaf.graphite.GraphiteLookAndFeel",
"com.jtattoo.plaf.luna.LunaLookAndFeel",
"com.jtattoo.plaf.noire.NoireLookAndFeel"};
try {
UIManager.setLookAndFeel(laf[4]);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (UnsupportedLookAndFeelException e) {
e.printStackTrace();
}
SwingUtilities.updateComponentTreeUI(view);
}
/**
* Die Methode rechnet für gegebene Größen die Algorithmen durch und gibt jeweils die benötigte Zeit
*/
public static void benchmark() {
int[] sizes = {50, 500, 1000, 3000, 5000, 10000};
for (int i = 5; i < sizes.length; i++) {
System.out.println("---- Datasetgröße: " + sizes[i] + " ----");
DatasetGenerator generator = new DatasetGenerator();
LinkedList<Line> lines = generator.generateDataCloud(sizes[i]);
IntersectionComputer computer = new IntersectionComputer(lines);
ArrayList<Point> points = computer.compute();
NaivLeastMedianOfSquaresEstimator naivLms = new NaivLeastMedianOfSquaresEstimator(lines);
naivLms.run();
NaivRepeatedMedianEstimator naivRm = new NaivRepeatedMedianEstimator(lines);
naivRm.run();
NaivTheilSenEstimator naivTs = new NaivTheilSenEstimator(lines);
naivTs.run();
LeastMedianOfSquaresEstimator lms = new LeastMedianOfSquaresEstimator(lines, points);
lms.run();
RepeatedMedianEstimator rm = new RepeatedMedianEstimator(lines);
rm.run();
TheilSenEstimator ts = new TheilSenEstimator(lines, points);
ts.run();
}
}
/**
* Maim Methode
*
* @param args
*/
public static void main(String[] args) {
if (args.length > 0 && args[0] == "--benchmark") {
benchmark();
} else {
final Presenter presenter = new Presenter(new LineModel(), null);
SwingUtilities.invokeLater(() -> {
//JFrame.setDefaultLookAndFeelDecorated(true);
MainFrame view = new MainFrame();
setLookAndFeel(view);
setUIFont(new javax.swing.plaf.FontUIResource(new Font("SansSerif", Font.PLAIN, 12)));
view.setPresenter(presenter);
view.setActionListeners();
presenter.setView(view);
});
}
}
}