68 lines
1.6 KiB
Java
68 lines
1.6 KiB
Java
package de.wwwu.awolf.presenter.data.generator;
|
|
|
|
import de.wwwu.awolf.model.Line;
|
|
import java.security.SecureRandom;
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
import java.util.Set;
|
|
|
|
/**
|
|
* Implementierung verschiedener Algorithmen zur Berechnung von Ausgleichsgeraden.
|
|
*
|
|
* @Author: Armin Wolf
|
|
* @Email: a_wolf28@uni-muenster.de
|
|
* @Date: 01.08.2017.
|
|
*/
|
|
public class DatasetGenerator {
|
|
|
|
|
|
/**
|
|
* Konstruktor
|
|
*/
|
|
private DatasetGenerator() {
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* Generieren eines Datensatzes des typen: Gerade. Die Geraden werden in eine übergebene Liste hinzugefügt.
|
|
*
|
|
* @param n Größe des Datensatzes
|
|
* @return Liste des Geraden
|
|
*/
|
|
public static Set<Line> generateDataLines(Set<Line> lines, int n) {
|
|
|
|
double m = 5d;
|
|
double b = 0d;
|
|
|
|
int size = 0;
|
|
Map<Double, Double> points = new HashMap<>();
|
|
|
|
//speichere die Koordinaten in einer HashMap, damit keine Punkte
|
|
//entstehen deren x-Koordinate zu sehr beieinander liegt.
|
|
SecureRandom random = new SecureRandom();
|
|
while (size < n) {
|
|
double y = random.nextGaussian();
|
|
double signal = m * y + b;
|
|
signal *= -1;
|
|
|
|
if (!points.containsKey(y)) {
|
|
points.put(y, signal);
|
|
size++;
|
|
}
|
|
}
|
|
|
|
int idx = lines.size();
|
|
for (Map.Entry<Double, Double> d : points.entrySet()) {
|
|
Line line = new Line(d.getKey(), d.getValue());
|
|
line.setId(idx + "");
|
|
lines.add(line);
|
|
idx++;
|
|
}
|
|
|
|
return lines;
|
|
}
|
|
|
|
}
|
|
|