RGB插值在您的颜色比例尺中效果更好,HSL在蓝色和黄色之间添加了一种带绿色的颜色:
![enter image description here](https://istack.dev59.com/OnzyZ.webp)
RGB插值:
function lerp(start, end, t) {
return (1 - t) * start + t * end;
}
function getColor(t) {
var colors = [
[153, 173, 255], [204, 218, 255], [245, 245, 255],
[252, 255, 214], [255, 243, 163], [255, 163, 82],
[251, 98, 81]
];
var domain = [-0.63, 0.165, 0.33, 0.495, 0.66, 0.825, 2.057];
if (t <= domain[0]) {
return colors[0];
}
if (t >= domain[domain.length - 1]) {
return colors[colors.length - 1];
}
for (var i = 0; t > domain[i]; i++);
var from = colors[i - 1];
var to = colors[i];
t = (t - domain[i - 1]) / (domain[i] - domain[i - 1]);
return [
lerp(from[0], to[0], t),
lerp(from[1], to[1], t),
lerp(from[2], to[2], t)
];
}
绘制它:
function rgbToCSS(rgb) {
return 'rgb(' + Math.round(rgb[0]) + ',' +
Math.round(rgb[1]) + ',' +
Math.round(rgb[2]) + ')';
}
var canvas = document.createElement('canvas');
canvas.width = 800;
canvas.height = 100;
var context = canvas.getContext('2d');
for (var i = 0; i < canvas.width; i++) {
context.fillStyle = rgbToCSS(getColor(lerp(-0.63, 2.057, i / canvas.width)));
context.fillRect(i, 0, 1, canvas.height);
}
document.body.appendChild(canvas);
JSFiddle
的英译中文是:
{{链接1:JSFiddle}}
。