UNPKG

@jscad/modeling

Version:

Constructive Solid Geometry (CSG) Library for JSCAD

45 lines (37 loc) 1.12 kB
const flatten = require('../utils/flatten') const hueToColorComponent = require('./hueToColorComponent') /** * Converts HSL color values to RGB color values. * * @see http://en.wikipedia.org/wiki/HSL_color_space * @param {...Number|Array} values - HSL or HSLA color values * @return {Array} RGB or RGBA color values * @alias module:modeling/colors.hslToRgb * * @example * let mysphere = colorize(hslToRgb([0.9166666666666666, 1, 0.5]), sphere()) */ const hslToRgb = (...values) => { values = flatten(values) if (values.length < 3) throw new Error('values must contain H, S and L values') const h = values[0] const s = values[1] const l = values[2] let r = l // default is achromatic let g = l let b = l if (s !== 0) { const q = l < 0.5 ? l * (1 + s) : l + s - l * s const p = 2 * l - q r = hueToColorComponent(p, q, h + 1 / 3) g = hueToColorComponent(p, q, h) b = hueToColorComponent(p, q, h - 1 / 3) } if (values.length > 3) { // add alpha value if provided const a = values[3] return [r, g, b, a] } return [r, g, b] } module.exports = hslToRgb