gosel
Dołączył: 28 Paź 2008
Posty: 87
Przeczytał: 0 tematów
Pomógł: 1 raz Ostrzeżeń: 0/5
|
Wysłany: Sob 10:19, 07 Lis 2009 Temat postu: Zadanie |
|
|
Kod dla console aplication
Kod: |
#include <cstdlib>
#include <iostream>
using namespace std;
#define min(x,y) (((x) < (y)) ? (x) : (y))
struct Rgb {double r,g,b;};
struct Cmy {double c,m,y;};
struct Cmyk {double c,m,y,k;};
struct Hsv {double h,s,v;};
void cmyk_cmy (Cmyk &c1, Cmy &c2)
{
c2.c = min(1,c1.c*(1-c1.k)+c1.k);
c2.m = min(1,c1.m*(1-c1.k)+c1.k);
c2.y = min(1,c1.y*(1-c1.k)+c1.k);
}
void cmy_rgb(Rgb &r1, Cmy &c1)
{
r1.r=1-c1.c;
r1.g=1-c1.m;
r1.b=1-c1.y;
}
void hsv_rgb(Hsv &h1, Rgb &r1)
{
int tmp;
if(h1.h<60) tmp=0;
else if(h1.h<120) tmp=60;
else if(h1.h<180) tmp=120;
else if(h1.h<240) tmp=180;
else if(h1.h<300) tmp=240;
else tmp=300;
switch (tmp)
{
case 0:
{
r1.r=h1.v;
r1.g=h1.v*(1-h1.s*(1-(h1.h/60.0)));
r1.b=h1.v*(1-h1.s);
break;
}
case 60:
{
r1.r=h1.v*(1-h1.s*((h1.h/60.0)-1));
r1.g=h1.v;
r1.b=h1.v*(1-h1.s);
break;
}
case 120:
{
r1.r=h1.v*(1-h1.s);
r1.g=h1.v;
r1.b=h1.v*(1-h1.s*(3-(h1.h/60.0)));
break;
}
case 180:
{
r1.r=h1.v*(1-h1.s);
r1.g=h1.v*(1-h1.s*((h1.h/60.0)-3));
r1.b=h1.v;
break;
}
case 240:
{
r1.r=h1.v*(1-h1.s*(5-(h1.h/60.0)));
r1.g=h1.v*(1-h1.s);
r1.b=h1.v;
break;
}
case 300:
{
r1.r=h1.v;
r1.g=h1.v*(1-h1.s);
r1.b=h1.v*(1-h1.s*((h1.h/60.0)-5));
break;
}
}
}
int main(int argc, char *argv[])
{
Cmyk c1;
Cmy c2;
Rgb r1;
Hsv h1;
cout<<"Podaj kolor w CMYK: "<<endl>>c1.c>>c1.m>>c1.y;
cmyk_cmy(c1,c2);
cmy_rgb(r1,c2);
cout<<"Kolor w RGB: "<<endl;
cout<<r1.r<<" "<<r1.g<<" "<<r1.b<<endl;
cout<<"Podaj kolor HSV: "<<endl>>h1.h>>h1.s>>h1.v;
hsv_rgb(h1,r1);
cout<<"Kolor w RGB: "<<endl;
cout<<r1.r<<" "<<r1.g<<" "<<r1.b<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}
|
Post został pochwalony 0 razy
Ostatnio zmieniony przez gosel dnia Sob 10:20, 07 Lis 2009, w całości zmieniany 1 raz
|
|