Source: chemistry/ColorCHSV.js

/** 
 * @module
 */
define([
    'tinycolor'
], function(tinycolor) {
    /**
     * @class
     * @param {Object} InRGB - RGB color object
     * @param {number} InRGB.r - Red value
     * @param {number} InRGB.g - Green value
     * @param {number} InRGB.b - Blue value
     */
    ColorCHSV = function (InRGB) {
        var H_1, S_1; // CHSV parameters [0-1]
        var C_1, M_1, Y_1; // CMY parameters [0-1]
        var MaxCMY, MinCMY, DifCMY;
        C_1 = 1 - InRGB.r / 255;
        M_1 = 1 - InRGB.g / 255;
        Y_1 = 1 - InRGB.b / 255;
        MaxCMY = this.Max(C_1, M_1, Y_1);
        MinCMY = this.Min(C_1, M_1, Y_1);
        DifCMY = MaxCMY - MinCMY;
        if (MaxCMY !== 0) {
            S_1 = DifCMY / MaxCMY;
        }
        else {
            S_1 = 0;
        }
        if (S_1 === 0) {
            H_1 = 0;
        }
        else if (C_1 === MaxCMY) {
            H_1 = (M_1 - Y_1) / DifCMY;
        }
        else if (M_1 === MaxCMY) {
            H_1 = 2 + (Y_1 - C_1) / DifCMY;
        }
        else {
            H_1 = 4 + (C_1 - M_1) / DifCMY;
        }
        if (H_1 < 0) {
            this.CH = (H_1 * 60 + 360) / 360 * 240;
        }
        else {
            this.CH = H_1 * 60 / 360 * 240;
        }
        this.CS = S_1 * 240;
        this.CV = (1 - MaxCMY) * 240;
    };
    ColorCHSV.prototype.getRGBColor = function () {
        var sColorRGB = tinycolor({r: 0, g: 0, b: 0});
        var V_1, H_1, S_1; // CHSV parameters [0-1]
        var C_1, M_1, Y_1; // CMY parameters [0-1]
        var k; // Hue region
        var f, p, q, t; // Auxiliar vars
        var R, G, B; // RGB Values
        H_1 = this.CH / 240.0;
        V_1 = this.CV / 240.0;
        S_1 = this.CS / 240.0;
        if (S_1 === 0) {
            C_1 = 1.0 - V_1;
            M_1 = 1.0 - V_1;
            Y_1 = 1.0 - V_1;
        }
        else {
            k = parseInt(H_1 * 6);
            f = H_1 * 6.0 - k;
            p = (1.0 - V_1) * (1.0 - S_1);
            q = (1.0 - V_1) * (1.0 - S_1 * f);
            t = (1.0 - V_1) * (1.0 - S_1 * (1-f));
            switch (k) {
                case 0:
                    C_1 = 1.0 - V_1;
                    M_1 = t;
                    Y_1 = p;
                    break;
                case 1:
                    C_1 = q;
                    M_1 = 1.0 - V_1;
                    Y_1 = p;
                    break;
                case 2:
                    C_1 = p;
                    M_1 = 1.0 - V_1;
                    Y_1 = t;
                    break;
                case 3:
                    C_1 = p;
                    M_1 = q;
                    Y_1 = 1.0 - V_1;
                    break;
                case 4:
                    C_1 = t;
                    M_1 = p;
                    Y_1 = 1.0 - V_1;
                    break;
                default:
                    C_1 = 1.0 - V_1;
                    M_1 = p;
                    Y_1 = q;
                    break;
            }
        }
        R = (1.0 - C_1) * 255;
        G = (1.0 - M_1) * 255;
        B = (1.0 - Y_1) * 255;
        sColorRGB = tinycolor({r: R, g: G, b: B});
        return sColorRGB.toRgb();
    };
    ColorCHSV.prototype.Max = function (v1, v2, v3) {
        if (v2 > v1) {
            if (v3 > v2) {
                return v3;
            }
            else {
                return v2;
            }
        }
        else if (v3 > v1) {
            return v3;
        }
        else {
            return v1;
        }
    };
    ColorCHSV.prototype.Min = function (v1, v2, v3) {
        if (v2 < v1) {
            if (v3 < v2) {
                return v3;
            }
            else {
                return v2;
            }
        }
        else if (v3 < v1) {
            return v3;
        }
        else {
            return v1;
        }
    };
    return ColorCHSV;
});