Skip to content

Instantly share code, notes, and snippets.

@mhkeller
Forked from aubergene/README.md
Last active August 29, 2015 14:18
Show Gist options
  • Save mhkeller/d1523b23097cd58e0534 to your computer and use it in GitHub Desktop.
Save mhkeller/d1523b23097cd58e0534 to your computer and use it in GitHub Desktop.
A packaged version of aubergene's Scale (https://gist.github.com/aubergene/7791133)

I love D3's Quantitative Scales and wanted a simple way to create and use scales in that style.

Example

var centigradeToFahrenheit = new Sideburns(-40, 0, -40, 32);

centigradeToFahrenheit(35); // 95 hot!
centigradeToFahrenheit.inverse(14); // -10 cold!
var Sideburns = function(minDomain, maxDomain, minRange, maxRange, clamp){
// This is a function
var Normalizer = function(min, max) {
return function(val) {
return (val - min) / (max - min);
}
}
// This is another
var Interpolater = function(min, max, clamp) {
return function(val) {
val = min + (max - min) * val;
return clamp ? Math.min(Math.max(val, min), max) : val;
}
}
// This is a third
var Scale = function(minDomain, maxDomain, minRange, maxRange, clamp) {
var normalize = new Normalizer(minDomain, maxDomain);
var interpolate = new Interpolater(minRange, maxRange, clamp);
var _normalize = new Normalizer(minRange, maxRange);
var _interpolate = new Interpolater(minDomain, maxDomain, clamp);
var s = function(val) {
return interpolate(normalize(val));
};
s.inverse = function(val) {
return _interpolate(_normalize(val));
};
return s;
}
return Scale(minDomain, maxDomain, minRange, maxRange, clamp);
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment