Beispiel #1
0
    color colormap(cplx z) {
        double n(std::norm(z));
        if (n < 1) n = pow(n, pow(2.0, this->n-1-m));
        //if (n < 1) n = HUGE_VAL;
    
        n = std::sqrt(n);
        //n = std::log(n);
        n = (n-1)/(n+1);
        double d(std::acos(2*sqrt(abs(n)) - 1)/M_PI);
        //double d(std::acos(n)/M_PI);
        if (std::norm(z) < 1) d = 1 - d;

        return HSLcolor(std::arg(z), 1.0, d);
    }
Beispiel #2
0
//conversion http://www.easyrgb.com/index.php?X=MATH&H=18#text18
HSLcolor convertRGBtoHSL( const RGBcolor &col)
{
    float tempR = col.red / 255.0;
    float tempG = col.green / 255.0;
    float tempB = col.blue / 255.0;
    
    float Lvalue = 0;
    float Hvalue = 0;
    float Svalue = 0;    
    
    float maxValue = std::max(std::max(tempR, tempG), tempB);
    float minValue = std::min(std::min(tempR, tempG), tempB);
    float diff = maxValue - minValue;
    
    Lvalue = (maxValue + minValue) / 2.0;
    
    Svalue = diff;
    if(Svalue > 0)
    {
        if(Lvalue < 0.5) Svalue /= (maxValue + minValue);
        else Svalue /= (2 - maxValue - minValue);
    }
    
    float someRed = (maxValue - tempR) / diff;
    float someGreen = (maxValue - tempG) / diff;
    float someBlue = (maxValue - tempB) / diff;
    
    if(tempR == maxValue)
    {
        if(tempG == minValue) Hvalue = 5 + someBlue;
        else Hvalue = 1 - someGreen;
    }
    else if(tempG == maxValue)
    {
        if(tempB == minValue) Hvalue = 1 + someRed;
        else Hvalue = 3 - someBlue;
    }
    else
    {
        if(tempR == minValue) Hvalue = 3 + someGreen;
        else Hvalue = 5 - someRed;
    }
    Hvalue /= 6.0;
    
    return HSLcolor(Hvalue*360, Svalue*100, Lvalue*100);
}