在不使用范围值的情况下渲染温度图

时间:2011-01-09 19:48:02

标签: algorithm rendering

我想渲染一张地图,例如: alt text

具有不同的颜色,而不仅仅是渐变,具有0 ... 1温度值的地图,而不使用范围值,如果t = 0 ... 0.2,则使用红色* t,如果t> 0.2和t < 0.4使用橙色* t等。

任何提示?

编辑:“范围”的示例代码:

    else if (layerType == "temperature") {

     if (value <= 0.2) {
        r = Math.round(value * 200)+100;
        g = Math.round(value * 200)+100;
        b = Math.round(value * 250)+150;
        a = 1;
    } else if (value > 0.2 && value <= 1) {
        r = Math.round(value * 250);
        g = Math.round(value * 250);
        b = Math.round(value * 200);
        a = 1;
    }

1 个答案:

答案 0 :(得分:4)

您可以使用具有HSB色彩空间(色调,饱和度和亮度)的平滑连续函数将温度映射到颜色。

Hue映射可见颜色的光谱,如下所示: hue scale

http://en.wikipedia.org/wiki/File:HueScale.svg

在您的示例图像中,饱和度和亮度可能会保持不变,因此您的功能可以简单地将温度转换为色调:

hue = f(t)

根据您的需要,f可以是线性函数,对数,指数或任何看起来最好的。

有关如何将HSB转换为RGB颜色空间的讨论,请查看此StackOverflow主题接受的答案:Algorithm For Generating Unique Colors

有关色调的一般性讨论,请参阅此WikiPedia文章:http://en.wikipedia.org/wiki/Hue