UNPKG

@quartic/bokehjs

Version:

Interactive, novel data visualization

65 lines (64 loc) 1.79 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function angle_norm(angle) { while (angle < 0) { angle += 2 * Math.PI; } while (angle > 2 * Math.PI) { angle -= 2 * Math.PI; } return angle; } exports.angle_norm = angle_norm; function angle_dist(lhs, rhs) { return Math.abs(angle_norm(lhs - rhs)); } exports.angle_dist = angle_dist; function angle_between(mid, lhs, rhs, direction) { var norm_mid = angle_norm(mid); var d = angle_dist(lhs, rhs); var cond = angle_dist(lhs, norm_mid) <= d && angle_dist(norm_mid, rhs) <= d; if (direction == "anticlock") return cond; else return !cond; } exports.angle_between = angle_between; function random() { return Math.random(); } exports.random = random; function atan2(start, end) { /* * Calculate the angle between a line containing start and end points (composed * of [x, y] arrays) and the positive x-axis. */ return Math.atan2(end[1] - start[1], end[0] - start[0]); } exports.atan2 = atan2; // http://www2.econ.osaka-u.ac.jp/~tanizaki/class/2013/econome3/13.pdf (Page 432) function rnorm(mu, sigma) { // Generate a random normal with a mean of 0 and a sigma of 1 var r1; var r2; while (true) { r1 = random(); r2 = random(); r2 = (2 * r2 - 1) * Math.sqrt(2 * (1 / Math.E)); if (-4 * r1 * r1 * Math.log(r1) >= r2 * r2) break; } var rn = r2 / r1; // Transform the standard normal to meet the characteristics that we want (mu, sigma) rn = mu + sigma * rn; return rn; } exports.rnorm = rnorm; function clamp(val, min, max) { if (val > max) return max; if (val < min) return min; return val; } exports.clamp = clamp;