package presenter.util; import model.Line; import model.Point; import java.util.ArrayList; import java.util.Random; import java.util.concurrent.ThreadLocalRandom; /** * Implementierung verschiedener Algorithmen zur Berechnung von Ausgleichsgeraden. * * @Author: Armin Wolf * @Email: a_wolf28@uni-muenster.de * @Date: 26.06.2017. */ public class RandomSampler { /** * 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 ArrayList run(ArrayList set, Double r, Integer indexOfEnd) { ArrayList sampledLines = new ArrayList<>(); for (int i = 0; i < r; i++) { sampledLines.add(set.get(ThreadLocalRandom.current().nextInt(0, 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 ArrayList run(ArrayList set, Double r) { ArrayList sampledLines = new ArrayList<>(); for (Point p : set){ sampledLines.add(p.getX()); } Random rand = new Random(); int inputSize = sampledLines.size(); for (int i = 0; i < r; i++) { int indexToSwap = i + rand.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())); } }