You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
2.3 KiB
75 lines
2.3 KiB
package Model;
|
|
|
|
import java.util.Random;
|
|
import java.util.random.RandomGenerator;
|
|
|
|
public class GenBoundedRealist implements GenerationStrat{
|
|
private double min;
|
|
private double max;
|
|
private double generatedValue;
|
|
|
|
private boolean boundBlocked = false;
|
|
private Random random;
|
|
private double lastValue;
|
|
private boolean firstused = false;
|
|
|
|
public GenBoundedRealist(double min, double max, double firstValue){
|
|
if(min > max){ //Si la borne inférieure à une plus grande valeur que la borne supérieure, on les inverse
|
|
double temp = min;
|
|
min = max;
|
|
max = temp;
|
|
}
|
|
|
|
//On définit le minimum possible à -50 °
|
|
if(min < -50){
|
|
min = -50;
|
|
}
|
|
this.min=min;
|
|
|
|
//En réaliste, on ne va pas au dessus de 50°C
|
|
if(max > 50){
|
|
max = 50;
|
|
}
|
|
this.max=max;
|
|
|
|
|
|
|
|
lastValue=firstValue;
|
|
|
|
this.random = new Random();
|
|
}
|
|
|
|
@Override
|
|
public double generate() {
|
|
//Si on a déjà utilisé la première valeur, on génère une nouvelle valeur
|
|
if(firstused){
|
|
//On génère la nouvelle valeur
|
|
generatedValue = random.nextDouble() * (max - min) + min;
|
|
lastValue = lastValue + (random.nextDouble() * (max - min) + min);
|
|
|
|
//On fait attention à ce que la valeur finale reste dans les bornes
|
|
if(lastValue + generatedValue > max){
|
|
boundBlocked = true; //On renseigne qu'on a bloqué la génération aux bornes
|
|
lastValue = max;
|
|
}
|
|
|
|
if(lastValue + generatedValue < min){
|
|
boundBlocked = true; //On renseigne qu'on a bloqué la génération aux bornes
|
|
lastValue = min;
|
|
}
|
|
|
|
//Si la valeur s'est heurtée aux bornes, on réinitialise le booleen et retourne la valeur telle quelle
|
|
if(boundBlocked){
|
|
boundBlocked = false;
|
|
return lastValue;
|
|
}
|
|
//Sinon, on retourne la nouvelle valeur
|
|
return lastValue + generatedValue;
|
|
|
|
}
|
|
//Dans la cas on l'on avait pas encore passé la première valeur, on la renvoi et on précise que la première valeur a été utilisée
|
|
firstused = true;
|
|
return lastValue;
|
|
}
|
|
}
|