Skip to content

Instantly share code, notes, and snippets.

@spjwebster
Created October 13, 2011 21:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save spjwebster/1285662 to your computer and use it in GitHub Desktop.
Save spjwebster/1285662 to your computer and use it in GitHub Desktop.
Linear scaling via function currying, from domain to arbitrary range. Inspired by protovis.
function scale( domainMin, domainMax ) {
var rangeMin = 0;
var rangeMax = 100;
var f = function( value ) {
var r = (value - domainMin) / (domainMax - domainMin);
return rangeMin + (r * (rangeMax - rangeMin));
}
f.domain = function( newDomainMin, newDomainMax ) {
domainMin = newDomainMin;
domainMax = newDomainMax;
return f;
};
f.range = function( newRangeMin, newRangeMax ) {
rangeMin = newRangeMin;
rangeMax = newRangeMax;
return f;
};
return f;
}
// var x = scale( 1970, 2011 ).range( 0, 1 );
// console.log( x(1970) ) // 0
// console.log( x(2011) ) // 1
// console.log( x(2000) ) // 0.7317073170731707
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment