toolkit/javascript/d3/src/scale/quantize.js
changeset 47 c0b4a8b5a012
equal deleted inserted replaced
46:efd9c589177a 47:c0b4a8b5a012
       
     1 d3.scale.quantize = function() {
       
     2   return d3_scale_quantize(0, 1, [0, 1]);
       
     3 };
       
     4 
       
     5 function d3_scale_quantize(x0, x1, range) {
       
     6   var kx, i;
       
     7 
       
     8   function scale(x) {
       
     9     return range[Math.max(0, Math.min(i, Math.floor(kx * (x - x0))))];
       
    10   }
       
    11 
       
    12   function rescale() {
       
    13     kx = range.length / (x1 - x0);
       
    14     i = range.length - 1;
       
    15     return scale;
       
    16   }
       
    17 
       
    18   scale.domain = function(x) {
       
    19     if (!arguments.length) return [x0, x1];
       
    20     x0 = +x[0];
       
    21     x1 = +x[x.length - 1];
       
    22     return rescale();
       
    23   };
       
    24 
       
    25   scale.range = function(x) {
       
    26     if (!arguments.length) return range;
       
    27     range = x;
       
    28     return rescale();
       
    29   };
       
    30 
       
    31   scale.copy = function() {
       
    32     return d3_scale_quantize(x0, x1, range); // copy on write
       
    33   };
       
    34 
       
    35   return rescale();
       
    36 };