ref: 307ba8a8d9d7c0088462bc4e947639b4593ce597
dir: /math.c/
#include "a.h"
double
lerp(double a, double b, double r)
{
if(r < 0.0)
r = 0.0;
else if(r > 1.0)
r = 1.0;
return r * (b - a) + a;
}
double
dist(int x1, int y1, int x2, int y2)
{
int dx = x1 - x2;
int dy = y1 - y2;
return sqrt(dx*dx + dy*dy);
}
double
map(double v, double s1, double e1, double s2, double e2)
{
double r;
r = (v - s1) / (e1 - s1) * (e2 - s2) + s2;
return r;
}
double
randomgaussian(double mean, double sd)
{
static int prev = 0;
static double y2;
double y1, x1, x2, w;
if(prev){
y1 = y2;
prev = 0;
}else{
do{
x1 = 2*frand() - 1;
x2 = 2*frand() - 1;
w = x1 * x1 + x2 * x2;
}while(w >= 1);
w = sqrt(-2 * log(w) / w);
y1 = x1 * w;
y2 = x2 * w;
prev = 1;
}
return y1 * sd + mean;
}