130 lines
3.3 KiB
Java
130 lines
3.3 KiB
Java
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<Line> generateDataCloud(){
|
|
LinkedList<Line> 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",
|
|
"</br> <b>m</b> = "+m+"",
|
|
"</br> <b>b</b> = "+b+""};
|
|
setChanged();
|
|
notifyObservers(ret);
|
|
return lines;
|
|
}
|
|
|
|
public LinkedList<Line> generateDataLines(){
|
|
LinkedList<Line> lines = new LinkedList<>();
|
|
m = 1 + random.nextDouble();
|
|
b = random.nextDouble();
|
|
|
|
|
|
int size = 0;
|
|
HashMap<Double, Double> 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",
|
|
"</br> <b>m</b> = "+m+"",
|
|
"</br> <b>b</b> = "+b+""};
|
|
setChanged();
|
|
notifyObservers(ret);
|
|
return lines;
|
|
}
|
|
|
|
|
|
public LinkedList<Line> generateCircle() {
|
|
LinkedList<Line> 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;
|
|
}
|
|
|
|
}
|
|
|