66 lines
1.8 KiB
Java
66 lines
1.8 KiB
Java
package de.wwwu.awolf.presenter.data.generator;
|
|
|
|
import de.wwwu.awolf.model.Line;
|
|
|
|
import java.util.LinkedList;
|
|
import java.util.List;
|
|
import java.util.concurrent.Callable;
|
|
|
|
import static de.wwwu.awolf.presenter.data.generator.DatasetGenerator.generateDataLines;
|
|
|
|
/**
|
|
* 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<List<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 List<Line> call() throws Exception {
|
|
List<Line> lines = new LinkedList<>();
|
|
|
|
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);
|
|
}
|
|
}
|
|
|