UNPKG

@jscad/modeling

Version:

Constructive Solid Geometry (CSG) Library for JSCAD

74 lines (66 loc) 1.33 kB
const flatten = require('../utils/flatten') /** * Converts HSV color values to RGB color values. * * @see http://en.wikipedia.org/wiki/HSV_color_space. * @param {...Number|Array} values - HSV or HSVA color values * @return {Array} RGB or RGBA color values * @alias module:modeling/colors.hsvToRgb * * @example * let mysphere = colorize(hsvToRgb([0.9166666666666666, 1, 1]), sphere()) */ const hsvToRgb = (...values) => { values = flatten(values) if (values.length < 3) throw new Error('values must contain H, S and V values') const h = values[0] const s = values[1] const v = values[2] let r = 0 let g = 0 let b = 0 const i = Math.floor(h * 6) const f = h * 6 - i const p = v * (1 - s) const q = v * (1 - f * s) const t = v * (1 - (1 - f) * s) switch (i % 6) { case 0: r = v g = t b = p break case 1: r = q g = v b = p break case 2: r = p g = v b = t break case 3: r = p g = q b = v break case 4: r = t g = p b = v break case 5: r = v g = p b = q break } if (values.length > 3) { // add alpha value if provided const a = values[3] return [r, g, b, a] } return [r, g, b] } module.exports = hsvToRgb