67 lines
2.1 KiB
Java
67 lines
2.1 KiB
Java
package de.wwwu.awolf.presenter.util;
|
|
|
|
import de.wwwu.awolf.model.Line;
|
|
import de.wwwu.awolf.model.Point;
|
|
|
|
import java.security.SecureRandom;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
/**
|
|
* Implementierung verschiedener Algorithmen zur Berechnung von Ausgleichsgeraden.
|
|
*
|
|
* @Author: Armin Wolf
|
|
* @Email: a_wolf28@uni-muenster.de
|
|
* @Date: 26.06.2017.
|
|
*/
|
|
public class RandomSampler {
|
|
|
|
private static SecureRandom random = new SecureRandom(); // Compliant for security-sensitive use cases
|
|
|
|
private RandomSampler() {
|
|
super();
|
|
}
|
|
|
|
/**
|
|
* Diese Methode liefert eine <code>r</code> Elementige zufällige Stichprobe an Geraden.
|
|
*
|
|
* @param set Die gesammtmenge der Geraden aus denen gewählt werden soll
|
|
* @param r Anzahl der zu wählenden Geraden
|
|
* @return <code>r</code> Elementige zufällige Stichprobe an Geraden
|
|
*/
|
|
public static List<Line> run(List<Line> set, Double r, Integer indexOfEnd) {
|
|
|
|
List<Line> sampledLines = new ArrayList<>();
|
|
|
|
for (int i = 0; i < r; i++) {
|
|
sampledLines.add(set.get(random.nextInt(indexOfEnd)));
|
|
}
|
|
|
|
return sampledLines;
|
|
}
|
|
|
|
/**
|
|
* Diese Methode liefert eine <code>r</code> Elementige zufällige Stichprobe van Schnittpunkten.
|
|
*
|
|
* @param set Die gesammtmenge der Geraden aus denen gewählt werden soll
|
|
* @param r Anzahl der zu wählenden Geraden
|
|
* @return <code>r</code> Elementige zufällige Stichprobe an Schnittpunkten
|
|
*/
|
|
public static List<Double> run(List<Point> set, Double r) {
|
|
|
|
List<Double> sampledLines = new ArrayList<>();
|
|
for (Point p : set) {
|
|
sampledLines.add(p.getX());
|
|
}
|
|
|
|
int inputSize = sampledLines.size();
|
|
for (int i = 0; i < r; i++) {
|
|
int indexToSwap = i + random.nextInt(inputSize - i);
|
|
Double temp = sampledLines.get(i);
|
|
sampledLines.set(i, sampledLines.get(indexToSwap));
|
|
sampledLines.set(indexToSwap, temp);
|
|
}
|
|
return new ArrayList<>(sampledLines.subList(0, r.intValue()));
|
|
}
|
|
}
|