molstar
Version:
A comprehensive macromolecular library.
72 lines • 2.52 kB
JavaScript
/**
* Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author Alexander Rose <alexander.rose@weirdbyte.de>
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.almostIdentity = exports.smootheststep = exports.smootherstep = exports.smoothstep = exports.quadraticBezier = exports.spline = exports.lerp = exports.damp = exports.saturate = exports.pclamp = exports.clamp = exports.normalize = void 0;
function normalize(value, min, max) {
return (value - min) / (max - min);
}
exports.normalize = normalize;
function clamp(value, min, max) {
return Math.max(min, Math.min(max, value));
}
exports.clamp = clamp;
function pclamp(value) {
return clamp(value, 0, 100);
}
exports.pclamp = pclamp;
function saturate(value) {
return clamp(value, 0, 1);
}
exports.saturate = saturate;
function damp(value, dampingFactor) {
var dampedValue = value * dampingFactor;
return Math.abs(dampedValue) < 0.1 ? 0 : dampedValue;
}
exports.damp = damp;
function lerp(start, stop, alpha) {
return start + (stop - start) * alpha;
}
exports.lerp = lerp;
/** Catmul-Rom spline */
function spline(p0, p1, p2, p3, t, tension) {
var v0 = (p2 - p0) * tension;
var v1 = (p3 - p1) * tension;
var t2 = t * t;
var t3 = t * t2;
return (2 * p1 - 2 * p2 + v0 + v1) * t3 + (-3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1;
}
exports.spline = spline;
function quadraticBezier(p0, p1, p2, t) {
var k = 1 - t;
return (k * k * p0) + (2 * k * t * p1) + (t * t * p2);
}
exports.quadraticBezier = quadraticBezier;
function smoothstep(min, max, x) {
x = saturate(normalize(x, min, max));
return x * x * (3 - 2 * x);
}
exports.smoothstep = smoothstep;
function smootherstep(min, max, x) {
x = saturate(normalize(x, min, max));
return x * x * x * (x * (x * 6 - 15) + 10);
}
exports.smootherstep = smootherstep;
function smootheststep(min, max, x) {
x = saturate(normalize(x, min, max));
return -20 * Math.pow(x, 7) + 70 * Math.pow(x, 6) - 84 * Math.pow(x, 5) + 35 * Math.pow(x, 4);
}
exports.smootheststep = smootheststep;
function almostIdentity(value, start, stop) {
if (value > start)
return value;
var a = 2 * stop - start;
var b = 2 * start - 3 * stop;
var t = value / start;
return (a * t + b) * t * t + stop;
}
exports.almostIdentity = almostIdentity;
//# sourceMappingURL=interpolate.js.map
;