Spaces:
Sleeping
Sleeping
| import "../arrays/map"; | |
| import "../core/array"; | |
| import "../core/identity"; | |
| import "../math/trigonometry"; | |
| var d3_ease_default = function() { return d3_identity; }; | |
| var d3_ease = d3.map({ | |
| linear: d3_ease_default, | |
| poly: d3_ease_poly, | |
| quad: function() { return d3_ease_quad; }, | |
| cubic: function() { return d3_ease_cubic; }, | |
| sin: function() { return d3_ease_sin; }, | |
| exp: function() { return d3_ease_exp; }, | |
| circle: function() { return d3_ease_circle; }, | |
| elastic: d3_ease_elastic, | |
| back: d3_ease_back, | |
| bounce: function() { return d3_ease_bounce; } | |
| }); | |
| var d3_ease_mode = d3.map({ | |
| "in": d3_identity, | |
| "out": d3_ease_reverse, | |
| "in-out": d3_ease_reflect, | |
| "out-in": function(f) { return d3_ease_reflect(d3_ease_reverse(f)); } | |
| }); | |
| d3.ease = function(name) { | |
| var i = name.indexOf("-"), | |
| t = i >= 0 ? name.slice(0, i) : name, | |
| m = i >= 0 ? name.slice(i + 1) : "in"; | |
| t = d3_ease.get(t) || d3_ease_default; | |
| m = d3_ease_mode.get(m) || d3_identity; | |
| return d3_ease_clamp(m(t.apply(null, d3_arraySlice.call(arguments, 1)))); | |
| }; | |
| function d3_ease_clamp(f) { | |
| return function(t) { | |
| return t <= 0 ? 0 : t >= 1 ? 1 : f(t); | |
| }; | |
| } | |
| function d3_ease_reverse(f) { | |
| return function(t) { | |
| return 1 - f(1 - t); | |
| }; | |
| } | |
| function d3_ease_reflect(f) { | |
| return function(t) { | |
| return 0.5 * (t < 0.5 ? f(2 * t) : (2 - f(2 - 2 * t))); | |
| }; | |
| } | |
| function d3_ease_quad(t) { | |
| return t * t; | |
| } | |
| function d3_ease_cubic(t) { | |
| return t * t * t; | |
| } | |
| // Optimized clamp(reflect(poly(3))). | |
| function d3_ease_cubicInOut(t) { | |
| if (t <= 0) return 0; | |
| if (t >= 1) return 1; | |
| var t2 = t * t, t3 = t2 * t; | |
| return 4 * (t < 0.5 ? t3 : 3 * (t - t2) + t3 - 0.75); | |
| } | |
| function d3_ease_poly(e) { | |
| return function(t) { | |
| return Math.pow(t, e); | |
| }; | |
| } | |
| function d3_ease_sin(t) { | |
| return 1 - Math.cos(t * halfπ); | |
| } | |
| function d3_ease_exp(t) { | |
| return Math.pow(2, 10 * (t - 1)); | |
| } | |
| function d3_ease_circle(t) { | |
| return 1 - Math.sqrt(1 - t * t); | |
| } | |
| function d3_ease_elastic(a, p) { | |
| var s; | |
| if (arguments.length < 2) p = 0.45; | |
| if (arguments.length) s = p / τ * Math.asin(1 / a); | |
| else a = 1, s = p / 4; | |
| return function(t) { | |
| return 1 + a * Math.pow(2, -10 * t) * Math.sin((t - s) * τ / p); | |
| }; | |
| } | |
| function d3_ease_back(s) { | |
| if (!s) s = 1.70158; | |
| return function(t) { | |
| return t * t * ((s + 1) * t - s); | |
| }; | |
| } | |
| function d3_ease_bounce(t) { | |
| return t < 1 / 2.75 ? 7.5625 * t * t | |
| : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + 0.75 | |
| : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + 0.9375 | |
| : 7.5625 * (t -= 2.625 / 2.75) * t + 0.984375; | |
| } | |