algorithms-for-computing-li.../LinearRegressionTool/src/main/java/de/wwwu/awolf/presenter/data/generator/CircleDatasetGenerator.java

64 lines
1.8 KiB
Java

package de.wwwu.awolf.presenter.data.generator;
import static de.wwwu.awolf.presenter.data.generator.DatasetGenerator.generateDataLines;
import de.wwwu.awolf.model.Line;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.Callable;
/**
* Implementierung verschiedener Algorithmen zur Berechnung von Ausgleichsgeraden.
*
* @Author: Armin Wolf
* @Email: a_wolf28@uni-muenster.de
* @Date: 01.08.2017.
*/
public class CircleDatasetGenerator implements Callable<Set<Line>> {
private final int size;
public CircleDatasetGenerator(int size) {
this.size = size;
}
/**
* Generiert einen Datensatz des typen: Gerade mit zirkulärer Störung. Zuerst wird die zirkuläre Störung zu der Liste der (dualen-)Geraden hinzugefügt danach wird die wrapper Methode
* <code>generateDataLines()</code> aufgerufen.
*
* @return Liste der Geraden
*/
@Override
public Set<Line> call() throws Exception {
Set<Line> lines = new HashSet<>();
double from = 0;
double to = Math.PI * 5;
//obere Grenze für die neuen Punkte
int n = size / 2 + lines.size();
//calculate the distance between every two points
double distance = (to - from) / ((double) n);
//create points
double currentDistance = from;
//an die aktuelle Liste dranhängen
for (int i = lines.size(); i < n; i++) {
double x = Math.cos(currentDistance);
double y = Math.sin(currentDistance);
Line line = new Line(x, y);
line.setId(i + "");
lines.add(line);
//distance for the next iteration
currentDistance += distance;
}
int generateSize = (int) (size * 0.5);
return generateDataLines(lines, generateSize);
}
}