00001 00012 #include "BinTo3ColorScale.h" 00013 00014 #include <cassert> 00015 00016 BinTo3ColorScale:: 00017 BinTo3ColorScale ( const char * name ) 00018 : BinToColor ( name ) 00019 { 00020 } 00021 00022 BinTo3ColorScale::BinTo3ColorScale ( const BinTo3ColorScale & bin_to_color ) 00023 : BinToColor ( bin_to_color ) 00024 { 00025 } 00026 00027 BinToColor * BinTo3ColorScale:: clone () const 00028 { 00029 return new BinTo3ColorScale ( *this ); 00030 } 00031 00032 void BinTo3ColorScale::doubleToColor ( double value, Color & color ) const 00033 { 00034 double r,g,b; 00035 double dv = m_range.length (); 00036 double vmin = m_range.low (); 00037 double v = value; 00038 00039 if (v < (vmin + 0.25 * dv)) { 00040 r = 0; 00041 g = 2* (v - vmin) / dv; 00042 b = 1 - 2*(v -vmin)/dv ; 00043 00044 } else if (v < (vmin + 0.5 * dv)) { 00045 r = 0; 00046 g = 2*(v - vmin) / dv; 00047 b = 1 - 2 * (v - vmin) / dv; 00048 } else if (v < (vmin + 0.75 * dv)) { 00049 r = 2 * (v - vmin - 0.5 * dv) / dv; 00050 g = 1 - 2* (v - vmin - 0.5*dv) / dv; 00051 b = 0; 00052 } else { 00053 r = 2 * (v - vmin - 0.5 * dv) / dv; 00054 g = 1 - 2 * (v - vmin - 0.5 * dv ) / dv; 00055 b = 0; 00056 } 00057 int red = static_cast < int > ( r * 255. ); 00058 int green = static_cast < int > ( g * 255. ); 00059 int blue = static_cast < int > ( b * 255. ); 00060 00061 00062 assert ( red < 256 && green < 256 && blue < 256 ); 00063 color.setColor ( red, green, blue ); 00064 } 00065 00066 00067 00068 00069 00070 00071 00072 00073 00074 00075 00076 00077 00078 00079 00080