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
115
116
117
118
119
120
|
#[derive(Debug)]
pub struct WhitePoint {
pub red: f64,
pub green: f64,
pub blue: f64,
}
pub fn avg(temp: u32, ratio: f64) -> WhitePoint {
const WPS: [WhitePoint; 20] = [
WhitePoint {
red: 1.00000000,
green: 0.18172716,
blue: 0.00000000,
},
WhitePoint {
red: 1.00000000,
green: 0.42322816,
blue: 0.00000000,
},
WhitePoint {
red: 1.00000000,
green: 0.54360078,
blue: 0.08679949,
},
WhitePoint {
red: 1.00000000,
green: 0.64373109,
blue: 0.28819679,
},
WhitePoint {
red: 1.00000000,
green: 0.71976951,
blue: 0.42860152,
},
WhitePoint {
red: 1.00000000,
green: 0.77987699,
blue: 0.54642268,
},
WhitePoint {
red: 1.00000000,
green: 0.82854786,
blue: 0.64816570,
},
WhitePoint {
red: 1.00000000,
green: 0.86860704,
blue: 0.73688797,
},
WhitePoint {
red: 1.00000000,
green: 0.90198230,
blue: 0.81465502,
},
WhitePoint {
red: 1.00000000,
green: 0.93853986,
blue: 0.88130458,
},
WhitePoint {
red: 1.00000000,
green: 0.97107439,
blue: 0.94305985,
},
WhitePoint {
red: 1.00000000,
green: 1.00000000,
blue: 1.00000000,
},
WhitePoint {
red: 0.95160805,
green: 0.96983355,
blue: 1.00000000,
},
WhitePoint {
red: 0.91194747,
green: 0.94470005,
blue: 1.00000000,
},
WhitePoint {
red: 0.87906581,
green: 0.92357340,
blue: 1.00000000,
},
WhitePoint {
red: 0.85139976,
green: 0.90559011,
blue: 1.00000000,
},
WhitePoint {
red: 0.82782969,
green: 0.89011714,
blue: 1.00000000,
},
WhitePoint {
red: 0.80753191,
green: 0.87667891,
blue: 1.00000000,
},
WhitePoint {
red: 0.78988728,
green: 0.86491137,
blue: 1.00000000,
},
WhitePoint {
red: 0.77442176,
green: 0.85453121,
blue: 1.00000000,
},
];
WhitePoint {
red: WPS[(temp / 500) as usize].red * (1f64 - ratio)
+ WPS[(temp / 500 + 1) as usize].red * ratio,
green: WPS[(temp / 500) as usize].green * (1f64 - ratio)
+ WPS[(temp / 500 + 1) as usize].green * ratio,
blue: WPS[(temp / 500) as usize].blue * (1f64 - ratio)
+ WPS[(temp / 500 + 1) as usize].blue * ratio,
}
}
|