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 }