Spaces:
Sleeping
Sleeping
| import "../arrays/bisect"; | |
| function d3_scale_polylinear(domain, range, uninterpolate, interpolate) { | |
| var u = [], | |
| i = [], | |
| j = 0, | |
| k = Math.min(domain.length, range.length) - 1; | |
| // Handle descending domains. | |
| if (domain[k] < domain[0]) { | |
| domain = domain.slice().reverse(); | |
| range = range.slice().reverse(); | |
| } | |
| while (++j <= k) { | |
| u.push(uninterpolate(domain[j - 1], domain[j])); | |
| i.push(interpolate(range[j - 1], range[j])); | |
| } | |
| return function(x) { | |
| var j = d3.bisect(domain, x, 1, k) - 1; | |
| return i[j](u[j](x)); | |
| }; | |
| } | |