function d3_scale_polylinear(domain, range, uninterpolate, interpolate) { var u = [], i = [], j = 0, n = domain.length; while (++j < n) { 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, domain.length - 1) - 1; return i[j](u[j](x)); }; }