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 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 lines = generator.generateDataCloud(sizes[i]); IntersectionComputer computer = new IntersectionComputer(lines); ArrayList 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); }); } } }