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
|
const palettes = [
[[0.5, 0.5, 0.5], [0.5, 0.5, 0.5], [1.0, 1.0, 1.0], [0.00, 0.33, 0.67]],
[[0.5, 0.5, 0.5], [0.5, 0.5, 0.5], [1.0, 1.0, 1.0], [0.00, 0.10, 0.20]],
[[0.5, 0.5, 0.5], [0.5, 0.5, 0.5], [1.0, 1.0, 1.0], [0.30, 0.20, 0.20]],
[[0.5, 0.5, 0.5], [0.5, 0.5, 0.5], [1.0, 1.0, 0.5], [0.80, 0.90, 0.30]],
[[0.5, 0.5, 0.5], [0.5, 0.5, 0.5], [1.0, 0.7, 0.4], [0.00, 0.15, 0.20]],
[[0.5, 0.5, 0.5], [0.5, 0.5, 0.5], [2.0, 1.0, 0.0], [0.50, 0.20, 0.25]],
[[0.8, 0.5, 0.4], [0.2, 0.4, 0.2], [2.0, 1.0, 1.0], [0.00, 0.25, 0.25]],
]
let palette = palettes[0]
function channel (t, a, b, c, d, add, mul) {
return a + b * Math.cos(2 * Math.PI * (c * t + d)) * mul + add
}
function color (t, add, mul, alpha) {
add = add || 0
mul = mul || 1
let a, b, c, d
const rgb = []
for (var i = 0; i < 3; i++) {
a = palette[0][i]
b = palette[1][i]
c = palette[2][i]
d = palette[3][i]
rgb[i] = Math.round(channel(t, a, b, c, d, add, mul) * 255)
}
return 'rgba(' + rgb + ',' + alpha + ')'
}
function hsl2rgb (H, S, L) {
var R,G,B;
var var_1, var_2;
if ( S == 0 ) { //HSL from 0 to 1
R = L * 255 //RGB results from 0 to 255
G = L * 255
B = L * 255
}
else {
if ( L < 0.5 ) var_2 = L * ( 1 + S )
else var_2 = ( L + S ) - ( S * L )
var_1 = 2 * L - var_2
R = 255 * hue2rgb( var_1, var_2, H + ( 1 / 3 ) )
G = 255 * hue2rgb( var_1, var_2, H )
B = 255 * hue2rgb( var_1, var_2, H - ( 1 / 3 ) )
}
return [R,G,B]
}
function hue2rgb( v1, v2, vH ) {
if ( vH < 0 ) vH += 1
if ( vH > 1 ) vH -= 1
if ( ( 6 * vH ) < 1 ) return ( v1 + ( v2 - v1 ) * 6 * vH )
if ( ( 2 * vH ) < 1 ) return ( v2 )
if ( ( 3 * vH ) < 2 ) return ( v1 + ( v2 - v1 ) * ( ( 2 / 3 ) - vH ) * 6 )
return ( v1 )
}
export default { color, hsl2rgb }
|