function getColor(percent) {
function getInterval(range) {
function getRatio(color) {
return Math.floor((colors[range[0]][color] * right + colors[range[1]][color] * left) / delta);
}
var left = percent - range[0],
right = range[1] - percent,
delta = range[1] - range[0];
return { r: getRatio('r'), g: getRatio('g'), b: getRatio('b') };
}
return colors[percent] || getInterval(stops.reduce(function (r, a, i, aa) {
return a < percent ? [a, aa[i + 1]] : r;
}, [0, 0]));
}
var stops = [0, 33, 66, 100],
colors = { 0: { r: 25, g: 47, b: 97 }, 33: { r: 75, g: 183, b: 183 }, 66: { r: 237, g: 120, b: 87 }, 100: { r: 209, g: 74, b: 88 } },
i, color, rgb;
for (i = 0; i <= 100; i++) {
color = getColor(i),
rgb = ['r', 'g', 'b'].map(function (k) { return color[k]; });
document.body.innerHTML += '<span style="color: #fff; background-color: rgb(' + rgb + ');" title="' + (colors[i] ? '* ' : '') + i + ' % rgb(' + rgb.join(', ') + ')">' + (colors[i] ? '* ' : ' ') + '</span>';
}