# HSV modele barw

2019-06-11 00:25
##### dcielak
0

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;
}``````

Pozostało 580 znaków

2019-06-11 08:12
##### MasterBLB
1

Zapewne ze wzorów na konwersję formatów RGB <=> HSV
Ale Bracie dcielak na Peruna ci takie wzory skoro używasz Qt gdzie tam masz ładną klasę QColor, a w niej konwersje w te i nazad do każdego formatu jaki dusza zapragnie?

"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]
edytowany 2x, ostatnio: MasterBLB, 2019-06-11 08:16

Pozostało 580 znaków

2019-06-11 10:58
##### dcielak
0

Dostaliśmy taki kod na wykładzie i chciałbym go przeanalizować ale coś nie bardzo :)

Prowadził ślepy kulawego. - MarekR22 2019-06-11 11:15

Pozostało 580 znaków

Liczba odpowiedzi na stronę