mam funkcjektora prezentuje modele barw hsv
Czy ktoś mogły mi wytlumaczyć skąd te wzorki się wzięły? i dlaczego w petlach są takie warunki ? np
for(double S = 0; S < 1; S+= 0.001666)
void MainWindow::on_HSlider_valueChanged(int value)
{
double R, G, B;
double H = (double)value;
double C;
double X;
double m;
ui->SSlider->setValue(0);
ui->VSlider->setValue(0);
for(double S = 0; S < 1; S+= 0.001666){
for(double V = 0; V < 1; V+=0.001666){
C = V * S;
X = C * (1.0 - fabs((double)moduloDouble(H/60.0, 2)-1.0));
m = V - C;
if(H < 60 && H >= 0){
R = C;
G = X;
B = 0;
}else if(H >= 60 && H < 120){
R = X;
G = C;
B = 0;
}else if(H >= 120 && H < 180){
R = 0;
G = C;
B = X;
}else if(H >= 180 && H < 240){
R = 0;
G = X;
B = C;
}else if(H >= 240 && H < 300){
R = X;
G = 0;
B = C;
}else if(H >= 300 && H <= 360){
R = C;
G = 0;
B = X;
}
red = (double)(R + m) * 255.0;
green = (double)(G + m) * 255.0;
blue = (double)(B + m) * 255.0;
zapalPiksel(S*600,V * 600);
}
}
update();
}
void MainWindow::on_SSlider_valueChanged(int value)
{
double R, G, B;
double S = (double)value / 100;
double C;
double X;
double m;
ui->HSlider->setValue(0);
ui->VSlider->setValue(0);
for(double H = 0; H < 360; H+=0.16){
for(double V = 0; V < 1; V+=0.001666){
C = S * V;
X = C * (1 - fabs(moduloDouble(H/60.0, 2)-1));
m = V - C;
if(H < 60 && H >= 0){
R = C;
G = X;
B = 0;
}else if(H >= 60 && H < 120){
R = X;
G = C;
B = 0;
}else if(H >= 120 && H < 180){
R = 0;
G = C;
B = X;
}else if(H >= 180 && H < 240){
R = 0;
G = X;
B = C;
}else if(H >= 240 && H < 300){
R = X;
G = 0;
B = C;
}else if(H >= 300 && H < 360){
R = C;
G = 0;
B = X;
}
red = (R + m) * 255;
green = (G + m) * 255;
blue = (B + m) * 255;
zapalPiksel(1.6667*H,V * 600);
}
}
update();
}
void MainWindow::on_VSlider_valueChanged(int value)
{
double R, G, B;
double V = (double)value/100.0;
double C;
double X;
double m;
ui->HSlider->setValue(0);
ui->SSlider->setValue(0);
for(double H = 0; H < 360; H+=0.6){
for(double S = 0; S < 1; S+=0.001666){
C = S * V;
X = C * (1 - fabs(moduloDouble(H/60.0, 2)-1));
m = V - C;
if(H < 60 && H >= 0){
R = C;
G = X;
B = 0;
}else if(H >= 60 && H < 120){
R = X;
G = C;
B = 0;
}else if(H >= 120 && H < 180){
R = 0;
G = C;
B = X;
}else if(H >= 180 && H < 240){
R = 0;
G = X;
B = C;
}else if(H >= 240 && H < 300){
R = X;
G = 0;
B = C;
}else if(H >= 300 && H < 360){
R = C;
G = 0;
B = X;
}
red = (R + m) * 255;
green = (G + m) * 255;
blue = (B + m) * 255;
zapalPiksel(1.6667*H,S * 600);
}
}
update();
}
i dodatkowo jak działa funkcja i po co ona jest ?
double moduloDouble(double value, int mod){
while(value - (double)mod > 0){
value -= (double)mod;
}
return value;
}