summaryrefslogtreecommitdiff
path: root/client/util/math.js
diff options
context:
space:
mode:
authorJules Laplace <julescarbon@gmail.com>2019-01-27 17:16:08 +0100
committerJules Laplace <julescarbon@gmail.com>2019-01-27 17:16:08 +0100
commitb5766ea986598e7ec53036d41deb9b0d152742ed (patch)
tree9e97d58592810ed4f93898bcd15c94d769f1a13e /client/util/math.js
parentc7dbbddf3539efc6d2d321cda9080005de9b6443 (diff)
light bath on oktween
Diffstat (limited to 'client/util/math.js')
-rw-r--r--client/util/math.js51
1 files changed, 51 insertions, 0 deletions
diff --git a/client/util/math.js b/client/util/math.js
new file mode 100644
index 00000000..064d37c6
--- /dev/null
+++ b/client/util/math.js
@@ -0,0 +1,51 @@
+export const mod = (n,m) => n-(m * Math.floor(n/m))
+export const clamp = (n,a,b) => n<a?a:n<b?n:b
+export const norm = (n,a,b) => (n-a) / (b-a)
+export const lerp = (n,a,b) => (b-a)*n+a
+export const mix = (n,a,b) => a*(1-n)+b*n
+export const randint = (n) => Math.floor(Math.random()*n)
+export const randrange = (a,b) => Math.random() * (b-a) + a
+export const randsign = () => Math.random() >= 0.5 ? -1 : 1
+export const choice = (a) => a[ Math.floor(Math.random() * a.length) ]
+export const angle = (x0,y0,x1,y1) => Math.atan2(y1-y0, x1-x0)
+export const dist = (x0,y0,x1,y1) => Math.sqrt(Math.pow(x1-x0, 2) + Math.pow(y1-y0, 2))
+export const xor = (a,b) => { a=!!a; b=!!b; return (a||b) && !(a&&b) }
+export const quantize = (a,b) => Math.floor(a/b)*b
+export const shuffle = (a) => {
+ for (var i = a.length; i > 0; i--){
+ var r = randint(i)
+ var swap = a[i-1]
+ a[i-1] = a[r]
+ a[r] = swap
+ }
+ return a
+}
+// returns a gaussian random function with the given mean and stdev.
+export function gaussian(mean, stdev) {
+ let y2;
+ let use_last = false;
+ return () => {
+ let y1;
+ if (use_last) {
+ y1 = y2;
+ use_last = false;
+ }
+ else {
+ let x1, x2, w;
+ do {
+ x1 = 2.0 * Math.random() - 1.0;
+ x2 = 2.0 * Math.random() - 1.0;
+ w = x1 * x1 + x2 * x2;
+ } while( w >= 1.0);
+ w = Math.sqrt((-2.0 * Math.log(w))/w);
+ y1 = x1 * w;
+ y2 = x2 * w;
+ use_last = true;
+ }
+
+ let retval = mean + stdev * y1;
+ if (retval > 0)
+ return retval;
+ return -retval;
+ }
+}