-
Notifications
You must be signed in to change notification settings - Fork 0
/
Color.h
102 lines (90 loc) · 2.21 KB
/
Color.h
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
#ifndef Color_h
#define Color_h
#include "Math.h"
#include <iosfwd>
class Color {
public:
Color() {
}
Color(const Color& copy) {
for(int i=0;i<3;i++)
data[i] = copy.data[i];
}
Color& operator=(const Color& copy) {
for(int i=0;i<3;i++)
data[i] = copy.data[i];
return *this;
}
~Color() {
}
double r() const {
return data[0];
}
double g() const {
return data[1];
}
double b() const {
return data[2];
}
Color(float r, float g, float b) {
data[0] = r;
data[1] = g;
data[2] = b;
}
Color operator+(const Color& c) const {
return Color(data[0] + c.data[0], data[1]+c.data[1], data[2]+c.data[2]);
}
Color& operator+=(const Color& c) {
data[0] += c.data[0]; data[1] += c.data[1]; data[2] += c.data[2];
return *this;
}
Color operator-(const Color& c) const {
return Color(data[0] - c.data[0], data[1]-c.data[1], data[2]-c.data[2]);
}
Color& operator-=(const Color& c) {
data[0] -= c.data[0]; data[1] -= c.data[1]; data[2] -= c.data[2];
return *this;
}
Color operator*(const Color& c) const {
return Color(data[0] * c.data[0], data[1]*c.data[1], data[2]*c.data[2]);
}
Color& operator*=(const Color& c) {
data[0] *= c.data[0]; data[1] *= c.data[1]; data[2] *= c.data[2];
return *this;
}
Color operator*(double s) const {
return Color(data[0]*s, data[1]*s, data[2]*s);
}
Color& operator*=(double s) {
data[0] *= s; data[1] *= s; data[2] *= s;
return *this;
}
Color operator*(float s) const {
return Color(data[0]*s, data[1]*s, data[2]*s);
}
Color& operator*=(float s) {
data[0] *= s; data[1] *= s; data[2] *= s;
return *this;
}
Color operator/(double s) const {
return Color(data[0]/s, data[1]/s, data[2]/s);
}
Color& operator/=(double s) {
data[0] /= s; data[1] /= s; data[2] /= s;
return *this;
}
Color operator/(float s) const {
return Color(data[0]/s, data[1]/s, data[2]/s);
}
Color& operator/=(float s) {
data[0] /= s; data[1] /= s; data[2] /= s;
return *this;
}
float maxComponent() const {
return Max(data[0], data[1], data[2]);
}
private:
float data[3];
};
std::ostream& operator<<(std::ostream&, const Color& c);
#endif