是的,你的建议听起来不错。对于中间值,通常使用线性插值。以下代码段显示了如何在 #00 和 #ff 之间插入 5% 的路径(还显示了您需要的转换):
> ("00" + Math.floor(parseInt('00',16) + 5 / 100 * parseInt('ff',16)).toString(16)).slice(-2)
"0c"
显然,您会将其包装在一个函数中 - 我只是从我检查过的 chrome 命令行中剪切+粘贴。
[编辑:]这清楚吗?在上述情况下,如果您想要#00 和 0m 以及 100m 处的 #ff,我将计算 5m 处的值,其中该值仅适用于一个通道(r、g 或 b)。您需要对各个步骤重复此操作,并将 rg 和 b 连接在一起。
这是另一个示例,您将从#a0 下降到#20,范围为50m,距离#a0 10m。请注意,我们有一个额外的减法,因为初始值不为零。
> ("00" + Math.floor(parseInt('a0',16) + 10 / 50 * (parseInt('20',16) - parseInt('a0', 16))).toString(16)).slice(-2)
"86"
所以,忽略转换,插值是:
start_value + (distance_from_start / total_distance) * (end_value - start_value)
并且转换是
decimal_int = parseInt(hex_string, 16)
hex_string = decimal_int.toString(16)
ps 我会想象 processing.js 已经为你编写了这样的功能,如果它有任何帮助的话(没有使用它,但它是那种库......)