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> { 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 * generateDataLines() aufgerufen. * * @return Liste der Geraden */ @Override public Set call() throws Exception { Set 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); } }