Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中将一系列值(例如[0255])映射到一系列颜色(例如彩虹:[红色,蓝色])_Javascript_Colors_Mapping - Fatal编程技术网

在JavaScript中将一系列值(例如[0255])映射到一系列颜色(例如彩虹:[红色,蓝色])

在JavaScript中将一系列值(例如[0255])映射到一系列颜色(例如彩虹:[红色,蓝色]),javascript,colors,mapping,Javascript,Colors,Mapping,我相信这一定是一个相当直截了当的问题,但这是一个很难回答的问题。我甚至不知道用谷歌搜索是为了什么 我不是在寻找任何复杂的解决方案。基本上,我是在画布上画线条,根据线条的长度,我想要不同的颜色。通常我只是缩放,比如说,红色通道(#ff0000*(测线长度)/(最大测线长度)),但这个解决方案并不理想。我只是在寻找一个方程,如果有意义的话,它会给出彩虹梯度上某个位置的#rrggbb值 感谢所有能帮上忙的人!非常感谢。既然您使用的是画布,那么您可能可以使用HSL颜色空间(如果我错了,请纠正我)。这将使

我相信这一定是一个相当直截了当的问题,但这是一个很难回答的问题。我甚至不知道用谷歌搜索是为了什么

我不是在寻找任何复杂的解决方案。基本上,我是在画布上画线条,根据线条的长度,我想要不同的颜色。通常我只是缩放,比如说,红色通道(#ff0000*(测线长度)/(最大测线长度)),但这个解决方案并不理想。我只是在寻找一个方程,如果有意义的话,它会给出彩虹梯度上某个位置的#rrggbb值


感谢所有能帮上忙的人!非常感谢。

既然您使用的是画布,那么您可能可以使用HSL颜色空间(如果我错了,请纠正我)。这将使代码更加简单:

function rainbow(n) {
    n = n * 240 / 255;
    return 'hsl(' + n + ',100%,50%)';
}
如果您对0到240的范围感到满意,那么您甚至可以删除此函数的第一行。请参阅。

这描述了在JS中制作彩虹颜色的方法。基本上,它使用正弦函数来制作彩虹颜色。简而言之,你需要的方程式是这样的。看


我最终使用了类似于@rsp的答案

                var getColorAtScalar = function (n, maxLength) {
                    var n = n * 240 / (maxLength);
                    return 'hsl(' + n + ',100%,50%)';
               }

我喜欢@rsp的答案(+1'ed),但想提及的是,Prefuse/Flare可视化库使用术语编码器来描述将数据转换为可视属性的功能(如Color:ColorEncoder):不确定该领域的标准化程度…我更改了示例,使用HSL颜色模型,使其更简单、更美观。我不确定240的范围是什么。当我在Chrome上测试时,它希望
hsl
函数的第一个参数是一个角度,角度从0到360度。@JimPivarski-Matthew问的是从红色到蓝色的彩虹,蓝色在hsl中是240度。360度将再次回到红色,这不是问题中提出的问题。
                var getColorAtScalar = function (n, maxLength) {
                    var n = n * 240 / (maxLength);
                    return 'hsl(' + n + ',100%,50%)';
               }