-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathRGBColor.cpp
114 lines (91 loc) · 2.54 KB
/
RGBColor.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include "RGBColor.h"
// there should be range checker to confirm value in range [0, 255]
RGBColor::RGBColor() {
for( int i = 0; i < RGB_len; i++) {
val[i] = 0;
}
}
RGBColor::RGBColor(const RTdouble &c) {
for( int i = 0; i < RGB_len; i++) {
val[i] = c;
}
}
RGBColor::RGBColor(const RTdouble &r, const RTdouble &g, const RTdouble &b) {
//val[0] = a;
val[0] = r;
val[1] = g;
val[2] = b;
}
RGBColor::RGBColor(const RTdouble color[]) {
// assert( sizeof(color) / sizeof(int) != 4);
// cout << sizeof(color) / sizeof(int) << endl;
for( int i = 0; i < RGB_len; i++) {
val[i] = color[i];
}
}
RGBColor & RGBColor::operator =(const RGBColor &color) {
for(int i = 0; i < RGB_len; i++) {
val[i] = color.val[i];
}
return *this;
}
RGBColor::RGBColor(const RGBColor &color) {
*this = color;
}
RGBColor RGBColor::operator +(const RGBColor&color) const {
return RGBColor(*this) += color;
}
RGBColor & RGBColor::operator +=(const RGBColor &color) {
for(int i = 0; i < RGB_len; i++) {
val[i] += color.val[i];
}
return *this;
}
RGBColor RGBColor::operator -(const RGBColor &color) const {
return RGBColor(*this) -= color;
}
RGBColor & RGBColor::operator -=(const RGBColor &color) {
*this += color * (RTdouble)-1.;
return *this;
}
RGBColor & RGBColor::operator *= (const RTdouble &scalar) {
for(int i = 0; i < RGB_len; i++) {
val[i] *= scalar; // decimal rate with precision loss
}
return *this;
}
RGBColor RGBColor::operator *(const RTdouble &scalar) const {
return RGBColor(*this) *= scalar;
}
RGBColor RGBColor::operator *(const RGBColor &color) const {
return RGBColor(R()*color.R(), G()*color.G(), B()*color.B());
}
RGBColor operator *(const RTdouble &scalar, const RGBColor &color) {
return color * scalar;
}
RGBColor RGBColor::operator /(const RTdouble &scalar) const {
return RGBColor(*this) /= scalar;
}
RGBColor & RGBColor::operator /= (const RTdouble &scalar) {
*this *= (1. / scalar);
return *this;
}
RGBColor RGBColor::operator ^(const RTdouble &n) const {
RGBColor temp(pow(R(), n), pow(G(), n), pow(B(), n));
return temp;
}
RTdouble RGBColor::R() const {
return val[0];
}
RTdouble RGBColor::G() const {
return val[1];
}
RTdouble RGBColor::B() const {
return val[2];
}
void RGBColor::print(const string &prompt) const {
printf("Color %s is (%.3lf, %.3lf, %.3lf).\n", prompt.c_str(), R(), G(), B());
}
string RGBColor::to_rep() const {
return "(" + to_string(R()) + ", " + to_string(G()) + ", " + to_string(B()) + ")";
}