AstroCol/src/lib/utils/math.ts

26 lines
760 B
TypeScript

export function getRandomGaussian(mean: number, stdDev: number) {
let u1 = Math.random();
let u2 = Math.random();
let z0 = Math.sqrt(-2.0 * Math.log(u1)) * Math.cos(2.0 * Math.PI * u2);
return z0 * stdDev + mean;
}
export function getRandomInRange(min: number, max: number) {
const mean = 0;
const stdDev = 3000;
let randomNum;
do {
randomNum = getRandomGaussian(mean, stdDev);
} while(randomNum < min || randomNum > max);
return Math.round(randomNum);
}
export function weightedRandom(weight: number) {
if (weight < 1 || weight > 100_000) {
throw new Error("Weight must be between 1 and 100000.");
}
return 1 / (1 + Math.exp(-0.00005 * (weight - 40_000))) * 0.7 + Math.random() * 0.3;
}