package Presenter.Generator; import Model.Line; import Model.Point; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; import java.util.Observable; import java.util.Random; /** * Implementierung verschiedener Algorithmen zur Berechnung von Ausgleichsgeraden. * * @Author: Armin Wolf * @Email: a_wolf28@uni-muenster.de * @Date: 01.08.2017. */ public class DatasetGenerator extends Observable{ private Double m; private Double b; private Random random; public DatasetGenerator(Double m, Double b){ this.m = m; this.b = b; random = new Random(); random.setSeed(9999); } public DatasetGenerator(){ random = new Random(); } public LinkedList generateDataCloud(){ LinkedList lines = new LinkedList<>(); m = 1 + random.nextDouble(); b = random.nextDouble(); for (int i=1;i<101;i++){ double y = (random.nextGaussian() * 100) % 100; double signal = m * i + b; signal *= -1; Line line = new Line((double) i, signal - y); line.setId(i-1+""); lines.add(line); } String[] ret = {"generator","Es wurden "+100+" Daten generiert mit den Parametern", "
m = "+m+"", "
b = "+b+""}; setChanged(); notifyObservers(ret); return lines; } public LinkedList generateDataLines(){ LinkedList lines = new LinkedList<>(); m = 1 + random.nextDouble(); b = random.nextDouble(); int size = 0; HashMap points = new HashMap<>(); //speichere die Koordinaten in einer HashMap, damit keine Punkte //entstehen deren x-Koordinate zu sehr beieinander liegt. while (size < 100){ double y = (random.nextGaussian() * 100) % 100; double signal = m * y + b; signal *= -1; if (!points.containsKey(y)){ points.put(y,signal); size++; } } int idx = lines.size(); for (Double d :points.keySet()) { Line line = new Line((double) d, points.get(d)); line.setId(idx+""); lines.add(line); idx++; } String[] ret = {"generator","Es wurden "+100+" Daten generiert mit den Parametern", "
m = "+m+"", "
b = "+b+""}; setChanged(); notifyObservers(ret); return lines; } public LinkedList generateCircle() { LinkedList lines = new LinkedList<>(); double from = 0; double to = Math.PI * 3; int n = 100; //calculate the distance between every two points double distance = (to - from) / ((double) n); //create points double currentDistance= from; for(int i=0; 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; } return lines; } }