00001 #include "RGBColor.h" 00002 00003 namespace rcrt 00004 { 00005 00006 00007 RGBColor::RGBColor(float c) 00008 { 00009 values[0] = values[1] = values[2] = c; 00010 } 00011 00012 RGBColor::RGBColor(float r, float g, float b) 00013 { 00014 values[0] = r; 00015 values[1] = g; 00016 values[2] = b; 00017 } 00018 00019 RGBColor::RGBColor(const RGBColor& col) 00020 { 00021 assign(col); 00022 } 00023 00024 RGBColor::~RGBColor() 00025 { 00026 } 00027 00028 void RGBColor::assign(const RGBColor& col) 00029 { 00030 if(&col != this){ 00031 values[0] = col.values[0]; 00032 values[1] = col.values[1]; 00033 values[2] = col.values[2]; 00034 } 00035 } 00036 00037 const RGBColor& RGBColor::operator= (const RGBColor& col) 00038 { 00039 assign(col); 00040 00041 return *this; 00042 } 00043 00044 RGBColor RGBColor::operator+ (const RGBColor& col) const 00045 { 00046 return RGBColor(values[0]+col.values[0],values[1]+col.values[1],values[2]+col.values[2]); 00047 } 00048 00049 RGBColor RGBColor::operator- (const RGBColor& col) const 00050 { 00051 return RGBColor(values[0]-col.values[0],values[1]-col.values[1],values[2]-col.values[2]); 00052 } 00053 00054 RGBColor RGBColor::operator* (float f) const 00055 { 00056 return RGBColor(values[0]*f,values[1]*f,values[2]*f); 00057 } 00058 00059 RGBColor RGBColor::operator/ (float f) const 00060 { 00061 float g = 1/f; 00062 return RGBColor(values[0]*g,values[1]*g,values[2]*g); 00063 } 00064 00065 RGBColor RGBColor::operator* (const RGBColor& col) const 00066 { 00067 return RGBColor(values[0]*col.values[0], 00068 values[1]*col.values[1], 00069 values[2]*col.values[2]); 00070 } 00071 00072 bool RGBColor::operator== (const RGBColor& col) const 00073 { 00074 return values[0] == col.values[0] && values[1] == col.values[1] 00075 && values[2] == col.values[2]; 00076 } 00077 00078 float RGBColor::r() const 00079 { 00080 return values[0]; 00081 } 00082 00083 float RGBColor::g() const 00084 { 00085 return values[1]; 00086 } 00087 00088 float RGBColor::b() const 00089 { 00090 return values[2]; 00091 } 00092 00093 float RGBColor::avg() const 00094 { 00095 return (values[0]+values[1]+values[2])/3; 00096 } 00097 00098 float RGBColor::sum() const 00099 { 00100 return values[0]+values[1]+values[2]; 00101 } 00102 00103 RGBColor RGBColor::clamped() const 00104 { 00105 return RGBColor(values[0] < 0 ? 0 : (values[0] > 1) ? 1 : values[0], 00106 values[1] < 0 ? 0 : (values[1] > 1) ? 1 : values[1], 00107 values[2] < 0 ? 0 : (values[2] > 1) ? 1 : values[2] 00108 ); 00109 } 00110 00111 const float& RGBColor::max() const 00112 { 00113 return std::max(std::max(values[0],values[1]),values[2]); 00114 } 00115 00116 const RGBColor RGBColor::BLACK = RGBColor(0); 00117 const RGBColor RGBColor::WHITE = RGBColor(1); 00118 const RGBColor RGBColor::RED = RGBColor(1,0,0); 00119 const RGBColor RGBColor::GREEN = RGBColor(0,1,0); 00120 const RGBColor RGBColor::BLUE = RGBColor(0,0,1); 00121 00122 00123 }