Files
cell/scripts/pmath.js

77 lines
1.4 KiB
JavaScript

var pmath = {}
var vector = use('vector')
pmath.rand_int = function (max = 9007199254740991) {
return Math.floor(Math.random() * max);
};
pmath.snap = function (val, grid) {
if (!grid || grid === 1) return Math.round(val);
var rem = val % grid;
var d = val - rem;
var i = Math.round(rem / grid) * grid;
return d + i;
};
pmath.TAU = Math.PI * 2;
pmath.deg2rad = function (deg) {
return deg * 0.0174533;
};
pmath.rad2deg = function (rad) {
return rad / 0.0174533;
};
pmath.turn2rad = function (x) {
return x * Math.TAU;
};
pmath.rad2turn = function (x) {
return x / Math.TAU;
};
pmath.turn2deg = function (x) {
return x * 360;
};
pmath.deg2turn = function (x) {
return x / 360;
};
pmath.randomint = function (max) {
return Math.clamp(Math.floor(Math.random() * max), 0, max - 1);
};
pmath.variate = vector.variate;
pmath.sortpointsccw = function (points) {
var cm = points2cm(points);
var cmpoints = points.map(function (x) {
return x.sub(cm);
});
var ccw = cmpoints.sort(function (a, b) {
var aatan = Math.atan2(a.y, a.x);
var batan = Math.atan2(b.y, b.x);
return aatan - batan;
});
return ccw.map(function (x) {
return x.add(cm);
});
};
pmath.sign = function (n) {
return n >= 0 ? 1 : -1;
};
pmath.points2cm = function(points)
{
var x = 0;
var y = 0;
var n = points.length;
points.forEach(function (p) {
x = x + p[0];
y = y + p[1];
});
return [x / n, y / n];
}
return pmath