Основная идея: использовать линейную интерполяцию.
Пример:
function lerp(a, b, fac) {
var ret = [];
for(var i = 0; i < Math.min(a.length, b.length); i++) {
ret[i] = a[i] * (1 - fac) + b[i] * fac;
}
return ret;
}
Кроме того, вам, вероятно, будет полезно иметь некоторую форму абстракции для Цвет ,Вы можете придать цвету более приятный вид, создав его как "var col = new Color ('# ff00ff');".После этого вы можете легко получить доступ к его значениям rgb и hsv.
Вот пример (не проверенный), который показывает, как он должен работать на практике:
// this func returns n colors (begin, <interpolated colors>, end)
function lerpColors(begin, end, n) {
var ret = [];
for(var i = 0; i < n; i++) {
var fac = i / (n - 1);
ret.push(lerp(a.toRGBArray(), b.toRGBArray(), fac));
}
return ret;
}
var col1 = new Color('#ff0011'); // some red
var col2 = new Color('#00ff11'); // some green
var colors = lerpColors(col1, col2, 7);