diff --git a/LinearRegressionTool/src/main/java/App.java b/LinearRegressionTool/src/main/java/App.java index 05d0787..bf31c34 100644 --- a/LinearRegressionTool/src/main/java/App.java +++ b/LinearRegressionTool/src/main/java/App.java @@ -9,7 +9,7 @@ import presenter.algorithms.advanced.TheilSenEstimator; import presenter.algorithms.naiv.NaivLeastMedianOfSquaresEstimator; import presenter.algorithms.naiv.NaivRepeatedMedianEstimator; import presenter.algorithms.naiv.NaivTheilSenEstimator; -import presenter.algorithms.util.IntersectionComputer; +import presenter.util.IntersectionComputer; import presenter.generator.DatasetGenerator; import view.MainFrame; @@ -18,8 +18,6 @@ import java.awt.*; import java.util.ArrayList; import java.util.LinkedList; -import static nu.pattern.OpenCV.loadShared; - /** * Implementierung verschiedener Algorithmen zur Berechnung von Ausgleichsgeraden. * diff --git a/LinearRegressionTool/src/main/java/presenter/AbstractPresenter.java b/LinearRegressionTool/src/main/java/presenter/AbstractPresenter.java index 7bc5530..55acbad 100644 --- a/LinearRegressionTool/src/main/java/presenter/AbstractPresenter.java +++ b/LinearRegressionTool/src/main/java/presenter/AbstractPresenter.java @@ -1,7 +1,7 @@ package presenter; import model.LineModel; -import presenter.algorithms.util.IntersectionComputer; +import presenter.util.IntersectionComputer; import presenter.evaluation.EvaluateAlgorithms; import view.MainFrame; @@ -138,7 +138,13 @@ public abstract class AbstractPresenter implements Observer { */ protected void computeIntersections(){ Thread t = new Thread(() -> { + long start, end; + + start = System.currentTimeMillis(); startIntersectionCalculation(); + end = System.currentTimeMillis(); + + System.out.println("Zeit: "+(end-start)/1000); }); t.start(); try { diff --git a/LinearRegressionTool/src/main/java/presenter/algorithms/advanced/LeastMedianOfSquaresEstimator.java b/LinearRegressionTool/src/main/java/presenter/algorithms/advanced/LeastMedianOfSquaresEstimator.java index 8e5e77b..ce5c0e7 100644 --- a/LinearRegressionTool/src/main/java/presenter/algorithms/advanced/LeastMedianOfSquaresEstimator.java +++ b/LinearRegressionTool/src/main/java/presenter/algorithms/advanced/LeastMedianOfSquaresEstimator.java @@ -5,7 +5,7 @@ import model.Line; import model.Point; import presenter.Presenter; import presenter.algorithms.Algorithm; -import presenter.algorithms.util.IntersectionCounter; +import presenter.util.IntersectionCounter; import java.util.*; diff --git a/LinearRegressionTool/src/main/java/presenter/algorithms/advanced/RepeatedMedianEstimator.java b/LinearRegressionTool/src/main/java/presenter/algorithms/advanced/RepeatedMedianEstimator.java index 67c7957..be61212 100644 --- a/LinearRegressionTool/src/main/java/presenter/algorithms/advanced/RepeatedMedianEstimator.java +++ b/LinearRegressionTool/src/main/java/presenter/algorithms/advanced/RepeatedMedianEstimator.java @@ -4,15 +4,14 @@ import model.Interval; import model.Line; import presenter.Presenter; import presenter.algorithms.Algorithm; -import presenter.algorithms.util.FastElementSelector; -import presenter.algorithms.util.IntersectionCounter; -import presenter.algorithms.util.RandomSampler; +import presenter.util.FastElementSelector; +import presenter.util.IntersectionCounter; +import presenter.util.RandomSampler; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; import java.util.Observable; -import java.util.concurrent.ThreadLocalRandom; /** @@ -199,9 +198,9 @@ public class RepeatedMedianEstimator extends Observable implements Algorithm { } } - countLeftSlab.set(index, (double) left); + countLeftSlab.set(index, (double) left); countCenterSlab.set(index, (double) center); - countRightSlab.set(index, (double) right); + countRightSlab.set(index, (double) right); } } @@ -301,6 +300,55 @@ public class RepeatedMedianEstimator extends Observable implements Algorithm { public Double getyInterception() { return yInterception; } + + /** + * @return temporäres untere Intervallgrenze + */ + public Double getkLow() { + return kLow; + } + + /** + * @param kLow temporäres untere Intervallgrenze + */ + public void setkLow(Double kLow) { + this.kLow = kLow; + } + + /** + * @return temporäres oberes Intervallgrenze + */ + public Double getkHigh() { + return kHigh; + } + + /** + * @param kHigh temporäres oberes Intervallgrenze + */ + public void setkHigh(Double kHigh) { + this.kHigh = kHigh; + } + + /** + * @return verteilung der Punkte + */ + public ArrayList getCountLeftSlab() { + return countLeftSlab; + } + + /** + * @return verteilung der Punkte + */ + public ArrayList getCountCenterSlab() { + return countCenterSlab; + } + + /** + * @return verteilung der Punkte + */ + public ArrayList getCountRightSlab() { + return countRightSlab; + } } diff --git a/LinearRegressionTool/src/main/java/presenter/algorithms/advanced/TheilSenEstimator.java b/LinearRegressionTool/src/main/java/presenter/algorithms/advanced/TheilSenEstimator.java index 910a0b0..a029d43 100644 --- a/LinearRegressionTool/src/main/java/presenter/algorithms/advanced/TheilSenEstimator.java +++ b/LinearRegressionTool/src/main/java/presenter/algorithms/advanced/TheilSenEstimator.java @@ -5,7 +5,7 @@ import model.Line; import model.Point; import presenter.Presenter; import presenter.algorithms.Algorithm; -import presenter.algorithms.util.*; +import presenter.util.*; import java.util.*; @@ -63,6 +63,8 @@ public class TheilSenEstimator extends Observable implements Algorithm { this.N = BinomialCoeffizient.run(n, 2); //this.k = Integer.valueOf((int) (N * 0.5)) - 1; this.k = (int) (N / 2); + + interval = new Interval(NEGATIV_INF, POSITIV_INF); } /** @@ -84,7 +86,6 @@ public class TheilSenEstimator extends Observable implements Algorithm { //damit eine initiale Ordnung herscht //Collections.sort(intervalIntersections); - interval = new Interval(NEGATIV_INF, POSITIV_INF); r = (double) n; while (true) { if (this.N <= n || (Math.abs(interval.getUpper() - interval.getLower())) < EPSILON) { diff --git a/LinearRegressionTool/src/main/java/presenter/algorithms/naiv/NaivLeastMedianOfSquaresEstimator.java b/LinearRegressionTool/src/main/java/presenter/algorithms/naiv/NaivLeastMedianOfSquaresEstimator.java index 608a73c..e0b4fb3 100644 --- a/LinearRegressionTool/src/main/java/presenter/algorithms/naiv/NaivLeastMedianOfSquaresEstimator.java +++ b/LinearRegressionTool/src/main/java/presenter/algorithms/naiv/NaivLeastMedianOfSquaresEstimator.java @@ -3,7 +3,7 @@ package presenter.algorithms.naiv; import model.Line; import model.Point; import presenter.algorithms.Algorithm; -import presenter.algorithms.util.FastElementSelector; +import presenter.util.FastElementSelector; import java.util.ArrayList; import java.util.Collections; diff --git a/LinearRegressionTool/src/main/java/presenter/algorithms/naiv/NaivRepeatedMedianEstimator.java b/LinearRegressionTool/src/main/java/presenter/algorithms/naiv/NaivRepeatedMedianEstimator.java index a7b698d..3b93cbd 100644 --- a/LinearRegressionTool/src/main/java/presenter/algorithms/naiv/NaivRepeatedMedianEstimator.java +++ b/LinearRegressionTool/src/main/java/presenter/algorithms/naiv/NaivRepeatedMedianEstimator.java @@ -3,7 +3,7 @@ package presenter.algorithms.naiv; import model.Line; import model.Point; import presenter.algorithms.Algorithm; -import presenter.algorithms.util.FastElementSelector; +import presenter.util.FastElementSelector; import java.util.ArrayList; import java.util.HashMap; diff --git a/LinearRegressionTool/src/main/java/presenter/algorithms/naiv/NaivTheilSenEstimator.java b/LinearRegressionTool/src/main/java/presenter/algorithms/naiv/NaivTheilSenEstimator.java index ae81941..1171d61 100644 --- a/LinearRegressionTool/src/main/java/presenter/algorithms/naiv/NaivTheilSenEstimator.java +++ b/LinearRegressionTool/src/main/java/presenter/algorithms/naiv/NaivTheilSenEstimator.java @@ -2,7 +2,7 @@ package presenter.algorithms.naiv; import model.Line; import presenter.algorithms.Algorithm; -import presenter.algorithms.util.FastElementSelector; +import presenter.util.FastElementSelector; import java.util.ArrayList; import java.util.LinkedList; diff --git a/LinearRegressionTool/src/main/java/presenter/evaluation/EvaluateAlgorithms.java b/LinearRegressionTool/src/main/java/presenter/evaluation/EvaluateAlgorithms.java index 1144f65..b938841 100644 --- a/LinearRegressionTool/src/main/java/presenter/evaluation/EvaluateAlgorithms.java +++ b/LinearRegressionTool/src/main/java/presenter/evaluation/EvaluateAlgorithms.java @@ -9,7 +9,7 @@ import presenter.algorithms.advanced.TheilSenEstimator; import presenter.algorithms.naiv.NaivLeastMedianOfSquaresEstimator; import presenter.algorithms.naiv.NaivRepeatedMedianEstimator; import presenter.algorithms.naiv.NaivTheilSenEstimator; -import presenter.algorithms.util.IntersectionComputer; +import presenter.util.IntersectionComputer; import presenter.generator.DatasetGenerator; import presenter.io.DataImporter; diff --git a/LinearRegressionTool/src/main/java/presenter/evaluation/PercentageErrorBasedMeasure.java b/LinearRegressionTool/src/main/java/presenter/evaluation/PercentageErrorBasedMeasure.java index 6eb1648..19c8e92 100644 --- a/LinearRegressionTool/src/main/java/presenter/evaluation/PercentageErrorBasedMeasure.java +++ b/LinearRegressionTool/src/main/java/presenter/evaluation/PercentageErrorBasedMeasure.java @@ -1,7 +1,7 @@ package presenter.evaluation; import model.Line; -import presenter.algorithms.util.FastElementSelector; +import presenter.util.FastElementSelector; import java.util.ArrayList; import java.util.LinkedList; diff --git a/LinearRegressionTool/src/main/java/presenter/evaluation/ScaleDependentMeasure.java b/LinearRegressionTool/src/main/java/presenter/evaluation/ScaleDependentMeasure.java index 7fa242a..53b768f 100644 --- a/LinearRegressionTool/src/main/java/presenter/evaluation/ScaleDependentMeasure.java +++ b/LinearRegressionTool/src/main/java/presenter/evaluation/ScaleDependentMeasure.java @@ -1,7 +1,7 @@ package presenter.evaluation; import model.Line; -import presenter.algorithms.util.FastElementSelector; +import presenter.util.FastElementSelector; import java.util.ArrayList; import java.util.LinkedList; diff --git a/LinearRegressionTool/src/main/java/presenter/evaluation/ScaledErrorBasedMeasure.java b/LinearRegressionTool/src/main/java/presenter/evaluation/ScaledErrorBasedMeasure.java index 9150e48..a5fd118 100644 --- a/LinearRegressionTool/src/main/java/presenter/evaluation/ScaledErrorBasedMeasure.java +++ b/LinearRegressionTool/src/main/java/presenter/evaluation/ScaledErrorBasedMeasure.java @@ -1,7 +1,7 @@ package presenter.evaluation; import model.Line; -import presenter.algorithms.util.FastElementSelector; +import presenter.util.FastElementSelector; import java.util.ArrayList; import java.util.LinkedList; diff --git a/LinearRegressionTool/src/main/java/presenter/algorithms/util/BinomialCoeffizient.java b/LinearRegressionTool/src/main/java/presenter/util/BinomialCoeffizient.java similarity index 94% rename from LinearRegressionTool/src/main/java/presenter/algorithms/util/BinomialCoeffizient.java rename to LinearRegressionTool/src/main/java/presenter/util/BinomialCoeffizient.java index f1be46c..ea0bd75 100644 --- a/LinearRegressionTool/src/main/java/presenter/algorithms/util/BinomialCoeffizient.java +++ b/LinearRegressionTool/src/main/java/presenter/util/BinomialCoeffizient.java @@ -1,4 +1,4 @@ -package presenter.algorithms.util; +package presenter.util; /** * Implementierung verschiedener Algorithmen zur Berechnung von Ausgleichsgeraden. diff --git a/LinearRegressionTool/src/main/java/presenter/algorithms/Comparators/YOrderLineComparatorBegin.java b/LinearRegressionTool/src/main/java/presenter/util/Comparators/YOrderLineComparatorBegin.java similarity index 90% rename from LinearRegressionTool/src/main/java/presenter/algorithms/Comparators/YOrderLineComparatorBegin.java rename to LinearRegressionTool/src/main/java/presenter/util/Comparators/YOrderLineComparatorBegin.java index 7662344..b22a320 100644 --- a/LinearRegressionTool/src/main/java/presenter/algorithms/Comparators/YOrderLineComparatorBegin.java +++ b/LinearRegressionTool/src/main/java/presenter/util/Comparators/YOrderLineComparatorBegin.java @@ -1,4 +1,4 @@ -package presenter.algorithms.Comparators; +package presenter.util.Comparators; import model.Line; diff --git a/LinearRegressionTool/src/main/java/presenter/algorithms/Comparators/YOrderLineComparatorEnd.java b/LinearRegressionTool/src/main/java/presenter/util/Comparators/YOrderLineComparatorEnd.java similarity index 90% rename from LinearRegressionTool/src/main/java/presenter/algorithms/Comparators/YOrderLineComparatorEnd.java rename to LinearRegressionTool/src/main/java/presenter/util/Comparators/YOrderLineComparatorEnd.java index 64276b1..123979a 100644 --- a/LinearRegressionTool/src/main/java/presenter/algorithms/Comparators/YOrderLineComparatorEnd.java +++ b/LinearRegressionTool/src/main/java/presenter/util/Comparators/YOrderLineComparatorEnd.java @@ -1,4 +1,4 @@ -package presenter.algorithms.Comparators; +package presenter.util.Comparators; import model.Line; diff --git a/LinearRegressionTool/src/main/java/presenter/algorithms/util/FastElementSelector.java b/LinearRegressionTool/src/main/java/presenter/util/FastElementSelector.java similarity index 98% rename from LinearRegressionTool/src/main/java/presenter/algorithms/util/FastElementSelector.java rename to LinearRegressionTool/src/main/java/presenter/util/FastElementSelector.java index 5fb4b41..a5595ab 100644 --- a/LinearRegressionTool/src/main/java/presenter/algorithms/util/FastElementSelector.java +++ b/LinearRegressionTool/src/main/java/presenter/util/FastElementSelector.java @@ -1,4 +1,4 @@ -package presenter.algorithms.util; +package presenter.util; import java.util.Collections; import java.util.List; diff --git a/LinearRegressionTool/src/main/java/presenter/algorithms/util/IntersectionComputer.java b/LinearRegressionTool/src/main/java/presenter/util/IntersectionComputer.java similarity index 98% rename from LinearRegressionTool/src/main/java/presenter/algorithms/util/IntersectionComputer.java rename to LinearRegressionTool/src/main/java/presenter/util/IntersectionComputer.java index 022cac1..e842611 100644 --- a/LinearRegressionTool/src/main/java/presenter/algorithms/util/IntersectionComputer.java +++ b/LinearRegressionTool/src/main/java/presenter/util/IntersectionComputer.java @@ -1,4 +1,4 @@ -package presenter.algorithms.util; +package presenter.util; import model.Interval; import model.Line; @@ -99,7 +99,6 @@ public class IntersectionComputer { private void work(List lines, double lower, double higher) { IntersectionCounter counter = new IntersectionCounter(); int count = counter.run(lines, new Interval(lower, higher)); - System.out.println("count: "+count); ArrayList points = counter.calculateIntersectionAbscissas(); for (Point p : points) { if (!isFound(p)) { diff --git a/LinearRegressionTool/src/main/java/presenter/algorithms/util/IntersectionCounter.java b/LinearRegressionTool/src/main/java/presenter/util/IntersectionCounter.java similarity index 97% rename from LinearRegressionTool/src/main/java/presenter/algorithms/util/IntersectionCounter.java rename to LinearRegressionTool/src/main/java/presenter/util/IntersectionCounter.java index 34d54e3..1826b58 100644 --- a/LinearRegressionTool/src/main/java/presenter/algorithms/util/IntersectionCounter.java +++ b/LinearRegressionTool/src/main/java/presenter/util/IntersectionCounter.java @@ -1,8 +1,8 @@ -package presenter.algorithms.util; +package presenter.util; import model.*; -import presenter.algorithms.Comparators.YOrderLineComparatorBegin; -import presenter.algorithms.Comparators.YOrderLineComparatorEnd; +import presenter.util.Comparators.YOrderLineComparatorBegin; +import presenter.util.Comparators.YOrderLineComparatorEnd; import java.util.*; diff --git a/LinearRegressionTool/src/main/java/presenter/algorithms/util/RandomSampler.java b/LinearRegressionTool/src/main/java/presenter/util/RandomSampler.java similarity index 97% rename from LinearRegressionTool/src/main/java/presenter/algorithms/util/RandomSampler.java rename to LinearRegressionTool/src/main/java/presenter/util/RandomSampler.java index 46dcabe..e8e2f7e 100644 --- a/LinearRegressionTool/src/main/java/presenter/algorithms/util/RandomSampler.java +++ b/LinearRegressionTool/src/main/java/presenter/util/RandomSampler.java @@ -1,10 +1,9 @@ -package presenter.algorithms.util; +package presenter.util; import model.Line; import model.Point; import java.util.ArrayList; -import java.util.List; import java.util.Random; import java.util.concurrent.ThreadLocalRandom; diff --git a/LinearRegressionTool/src/test/java/presenter/algorithms/LeastMedianOfSquaresEstimatorTest.java b/LinearRegressionTool/src/test/java/presenter/algorithms/advanced/LeastMedianOfSquaresEstimatorTest.java similarity index 72% rename from LinearRegressionTool/src/test/java/presenter/algorithms/LeastMedianOfSquaresEstimatorTest.java rename to LinearRegressionTool/src/test/java/presenter/algorithms/advanced/LeastMedianOfSquaresEstimatorTest.java index 435690b..e58fbc1 100644 --- a/LinearRegressionTool/src/test/java/presenter/algorithms/LeastMedianOfSquaresEstimatorTest.java +++ b/LinearRegressionTool/src/test/java/presenter/algorithms/advanced/LeastMedianOfSquaresEstimatorTest.java @@ -1,13 +1,12 @@ -package presenter.algorithms; - +package presenter.algorithms.advanced; import model.Interval; import model.Line; import model.Point; import org.junit.Before; import org.junit.Test; -import presenter.algorithms.advanced.LeastMedianOfSquaresEstimator; -import presenter.algorithms.util.IntersectionCounter; +import presenter.util.IntersectionComputer; +import presenter.util.IntersectionCounter; import java.util.ArrayList; import java.util.LinkedList; @@ -19,18 +18,19 @@ import static org.junit.Assert.*; * * @Author: Armin Wolf * @Email: a_wolf28@uni-muenster.de - * @Date: 12.06.2017. + * @Date: 23.10.2017. */ public class LeastMedianOfSquaresEstimatorTest { private LeastMedianOfSquaresEstimator lms; + private IntersectionComputer intersectionComputer; @Before - public void setUp() throws Exception { - + public void setUp(){ Double[] x = {18d, 24d, 30d, 34d, 38d}; Double[] y = {18d, 26d, 30d, 40d, 70d}; + LinkedList lines = new LinkedList<>(); ArrayList intersections = new ArrayList<>(); @@ -38,36 +38,11 @@ public class LeastMedianOfSquaresEstimatorTest { lines.add(new Line(x[i], y[i])); } + intersectionComputer = new IntersectionComputer(lines); + intersections = intersectionComputer.compute(); lms = new LeastMedianOfSquaresEstimator(lines, intersections); } - @Test - public void approximateLMS() throws Exception { - - } - - - @Test - public void mergeSort() throws Exception { -// double[] umin = {6,3,4,1,2,5}; -// double[] umax = {3,5,2,6,1,4}; - double[] umin = {1, 2, 3, 4}; - double[] umax = {2, 3, 4, 1}; - ArrayList a = new ArrayList<>(); - ArrayList b = new ArrayList<>(); - - for (double d : umin) { - a.add((int) d); - } - - for (double d : umax) { - b.add((int) d); - } - IntersectionCounter invCounter = new IntersectionCounter(); - int ret = invCounter.run(a, b); - assertEquals(3d, ret, 0.001); - - } @Test public void geEjValues() throws Exception { @@ -115,5 +90,4 @@ public class LeastMedianOfSquaresEstimatorTest { assertTrue(interval.getActivity()); } - } \ No newline at end of file diff --git a/LinearRegressionTool/src/test/java/presenter/algorithms/advanced/TheilSenEstimatorTest.java b/LinearRegressionTool/src/test/java/presenter/algorithms/advanced/TheilSenEstimatorTest.java new file mode 100644 index 0000000..cb07946 --- /dev/null +++ b/LinearRegressionTool/src/test/java/presenter/algorithms/advanced/TheilSenEstimatorTest.java @@ -0,0 +1,70 @@ +package presenter.algorithms.advanced; + +import model.Line; +import model.Point; +import org.junit.Before; +import org.junit.Test; +import presenter.util.IntersectionComputer; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.LinkedList; + +import static org.junit.Assert.*; + +/** + * Implementierung verschiedener Algorithmen zur Berechnung von Ausgleichsgeraden. + * + * @Author: Armin Wolf + * @Email: a_wolf28@uni-muenster.de + * @Date: 23.10.2017. + */ +public class TheilSenEstimatorTest { + + TheilSenEstimator estimator; + IntersectionComputer intersectionComputer; + + @Before + public void setUp(){ + Double[] x = {18d, 24d, 30d, 34d, 38d}; + Double[] y = {18d, 26d, 30d, 40d, 70d}; + + + LinkedList lines = new LinkedList<>(); + ArrayList intersections = new ArrayList<>(); + + for (int i = 0; i < 5; i++) { + lines.add(new Line(x[i], y[i])); + } + + intersectionComputer = new IntersectionComputer(lines); + intersections = intersectionComputer.compute(); + estimator = new TheilSenEstimator(lines, intersections); + } + + + @Test + public void getIntervalSize() throws Exception { + assertEquals(estimator.getIntervalSize(-2d, 0d), 5, 0.001); + } + + @Test + public void getOpenIntervalSize() throws Exception { + assertEquals(estimator.getIntervalSize(-1.4d, 0.6666d), 4, 0.001); + } + + @Test + public void getOpenIntervalElements() throws Exception { + ArrayList intersectionInInterval = estimator.getOpenIntervalElements(-1.4d, -0.67d); + double[] expected = {-1.375, -1.333, -1.0}; + double[] actual = new double[3]; + for (int i=0;i list = new ArrayList<>(Arrays.asList(array)); + assertEquals(FastElementSelector.randomizedSelect(list, 0), 1d, 0.00001); + assertEquals(FastElementSelector.randomizedSelect(list, 2), 2d, 0.00001); + } + + @Test(expected = IndexOutOfBoundsException.class) + public void testIndexOutOfBoundsException() { + ArrayList emptyList = new ArrayList(); + FastElementSelector.randomizedSelect(emptyList, 42); + } + +} \ No newline at end of file diff --git a/LinearRegressionTool/src/test/java/presenter/util/IntersectionComputerTest.java b/LinearRegressionTool/src/test/java/presenter/util/IntersectionComputerTest.java new file mode 100644 index 0000000..ff1c6cb --- /dev/null +++ b/LinearRegressionTool/src/test/java/presenter/util/IntersectionComputerTest.java @@ -0,0 +1,58 @@ +package presenter.util; + +import model.Line; +import model.LineModel; +import model.Point; +import org.junit.Before; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.Arrays; + +import static org.junit.Assert.*; + +/** + * Implementierung verschiedener Algorithmen zur Berechnung von Ausgleichsgeraden. + * + * @Author: Armin Wolf + * @Email: a_wolf28@uni-muenster.de + * @Date: 23.10.2017. + */ +public class IntersectionComputerTest { + + private IntersectionComputer intersectionComputer; + private LineModel lineModel; + + @Before + public void setUp() throws Exception { + lineModel = new LineModel(); + lineModel.addLine(new Line(3,13,10,3)); + lineModel.addLine(new Line(1,9,1,9)); + lineModel.addLine(new Line(1,12,4,6)); + intersectionComputer = new IntersectionComputer(lineModel.getLines()); + } + @Test + public void compute() throws Exception { + + ArrayList intersections = intersectionComputer.compute(); + double[] expectedX = {4.66, 7.11, 9.39}; + double[] expectedY = {4.66, 7.11, 5.52}; + + double[] actualX = new double[3]; + double[] actualY = new double[3]; + + for (int i=0;i<3;i++){ + actualX[i] = intersections.get(i).getX(); + actualY[i] = intersections.get(i).getY(); + } + + Arrays.sort(expectedX); + Arrays.sort(actualX); + assertArrayEquals(expectedX, actualX, 0.01d); + + Arrays.sort(expectedY); + Arrays.sort(actualY); + assertArrayEquals(expectedY, actualY, 0.01d); + } + +} \ No newline at end of file diff --git a/LinearRegressionTool/src/test/java/presenter/util/IntersectionCounterTest.java b/LinearRegressionTool/src/test/java/presenter/util/IntersectionCounterTest.java new file mode 100644 index 0000000..f880b93 --- /dev/null +++ b/LinearRegressionTool/src/test/java/presenter/util/IntersectionCounterTest.java @@ -0,0 +1,63 @@ +package presenter.util; + +import model.Interval; +import model.Line; +import model.LineModel; +import org.junit.Before; +import org.junit.Test; + +import java.util.ArrayList; + +import static org.junit.Assert.*; + +/** + * Implementierung verschiedener Algorithmen zur Berechnung von Ausgleichsgeraden. + * + * @Author: Armin Wolf + * @Email: a_wolf28@uni-muenster.de + * @Date: 23.10.2017. + */ +public class IntersectionCounterTest { + + private IntersectionCounter intersectionCounter; + private LineModel lineModel; + + @Before + public void setUp() throws Exception { + intersectionCounter = new IntersectionCounter(); + lineModel = new LineModel(); + lineModel.addLine(new Line(3,13,10,3)); + lineModel.addLine(new Line(1,9,1,9)); + lineModel.addLine(new Line(1,12,4,6)); + for (Line l :lineModel.getLines()) { + System.out.println("Steigung: "+l.getM()+"\t y-Achsenabschnitt: "+l.getB()); + } + } + + @Test + public void run() throws Exception { + assertEquals(3, intersectionCounter.run(lineModel.getLines(), new Interval(-9999,9999))); + } + + @Test + public void testInversionInLists(){ + // double[] umin = {6,3,4,1,2,5}; +// double[] umax = {3,5,2,6,1,4}; + double[] umin = {1, 2, 3, 4}; + double[] umax = {2, 3, 4, 1}; + ArrayList a = new ArrayList<>(); + ArrayList b = new ArrayList<>(); + + for (double d : umin) { + a.add((int) d); + } + + for (double d : umax) { + b.add((int) d); + } + IntersectionCounter invCounter = new IntersectionCounter(); + int ret = invCounter.run(a, b); + assertEquals(3d, ret, 0.001); + } + +} \ No newline at end of file