根据温度获取颜色

最近需要做一个功能,就是根据温度显示物体的颜色,类似中国天气网:

 

 

 /// <summary>

     ///  根据温度获取颜色
    
///  算法如下:
    
///  1.定义色阶变化范围fromColor, toColor
    
///  2.获取因子:factor = T / (MaxT - MinT);
    
///  3.计算新的RGB
    
///    R = fromColor.R * (1 - factor) + toColor.R * factor
    
///    G = fromColor.G * (1 - factor) + toColor.G * factor
    
///    B = fromColor.B * (1 - factor) * toColor.B * factor
    
///  4.如果多个色阶,重复上面的运算
    
///   </summary>
     public  static  class TemperatuerColor
    {
         private  static Color Red = Color.FromRgb( 25500);
         private  static Color Yellow = Color.FromRgb( 25500);
         private  static Color Blue = Color.FromRgb( 25500);

        
         public  static SolidColorBrush GetColor( double temperature,  double maxtemperature,  double mintemperature)
        {
             double ratio = temperature / (maxtemperature - mintemperature);
            Color result1 = Compute(Blue, Yellow, ratio);
            Color result2 = Compute(Yellow, Red, ratio);
            Color result =  Compute(result1, result2, ratio);

             return  new SolidColorBrush(result);
        }

         private  static Color Compute(Color fromColor, Color toColor,  double ratio)
        {
             byte r = ( byte)(fromColor.R * ( 1.0f - ratio) + toColor.R * ratio);
             byte g = ( byte)(fromColor.G * ( 1.0f - ratio) + toColor.G * ratio);
             byte b = ( byte)(fromColor.B * ( 1.0f - ratio) + toColor.B * ratio);
             return Color.FromRgb(r, g, b);
        }

    }

 

 我这里的颜色是红色->黄色->蓝色的渐变。如果需要增加新的色阶,就需要增加新的颜色.

Color result1 = Compute(Blue, Yellow, ratio);            

Color result2 = Compute(Yellow, Red, ratio);
Color result =  Compute(result1, result2, ratio);

 

转载于:https://www.cnblogs.com/enjoyeclipse/archive/2012/01/12/2320487.html

以下是一段简单的 JavaScript 程序,用于将温度投影到地图上: ``` // 创建地图 var map = L.map('map').setView([51.505, -0.09], 13); // 添加地图图层 L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { maxZoom: 18, }).addTo(map); // 添加温度图层 var temperatureLayer = L.layerGroup().addTo(map); // 温度数据 var temperatureData = [ {lat: 51.505, lng: -0.09, temp: 20}, {lat: 51.51, lng: -0.1, temp: 18}, {lat: 51.505, lng: -0.08, temp: 22}, ]; // 添加温度数据到图层 for (var i = 0; i < temperatureData.length; i++) { var data = temperatureData[i]; var marker = L.circleMarker([data.lat, data.lng], { radius: 10, color: 'red', fillColor: getColor(data.temp), fillOpacity: 1, }).bindPopup('Temperature: ' + data.temp + '°C').addTo(temperatureLayer); } // 根据温度获取颜色 function getColor(temp) { if (temp <= 10) { return 'blue'; } else if (temp > 10 && temp <= 20) { return 'green'; } else if (temp > 20 && temp <= 30) { return 'yellow'; } else { return 'red'; } } ``` 这段程序使用了 Leaflet.js 库,创建了一个地图,并在地图上添加了一个温度图层。温度数据存储在 `temperatureData` 数组中,每个数据包括经纬度和温度值。程序通过循环遍历温度数据,并创建一个圆形标记(使用 `L.circleMarker` 方法),将其位置设置为经纬度,并根据温度值设置填充颜色(使用 `getColor` 方法)。标记绑定了一个弹出窗口,显示温度值。最后,将所有标记添加到温度图层中(使用 `addTo` 方法)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值