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 r 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 r Elementige zufällige Stichprobe an Geraden */ public static List run(List set, Double r, Integer indexOfEnd) { List sampledLines = new ArrayList<>(); for (int i = 0; i < r; i++) { sampledLines.add(set.get(random.nextInt(indexOfEnd))); } return sampledLines; } /** * Diese Methode liefert eine r 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 r Elementige zufällige Stichprobe an Schnittpunkten */ public static List run(List set, Double r) { List 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())); } }