Thursday, February 25, 2010

window to viewport mapping

#include"stdio.h"
#include"conio.h"
#include"graphics.h"
#include"stdlib.h"
void main()
{
    float xwmin,xwmax,ywmax,ywmin;
    float xvmin,xvmax,yvmax,yvmin;
    float x[10],y[10],yv,xv,sx,sy;
    int gd=DETECT,gm,i;
    clrscr();
    printf("\n enter window port coordinates:\n(xwmin,ywmin,xwmax,ywmax): ");
    scanf("%f%f%f%f",&xwmin,&ywmin,&xwmax,&ywmax);
    printf("\n enter view port coordinates:\n(xvmin,yvmin,xvmax,yvmax): ");
    scanf("%f%f%f%f",&xvmin,&yvmin,&xvmax,&yvmax);
    printf("\n enter vertices for triangle: ");
    for(i=0;i < 3;i++)
    {
    printf("\n enter(x%d,y%d):",i,i);
    scanf("%f%f",&x[i],&y[i]);
    }
    sx=((xvmax-xvmin)/(xwmax-xwmin));
    sy=((yvmax-yvmin)/(ywmax-xwmin));

    initgraph(&gd,&gm," ");
    outtextxy(80,30,"window port");
    rectangle(xwmin,ywmin,xwmax,ywmax);
    for(i=0;i <2;i++)
    {
    line(x[i],y[i],x[i+1],y[i+1]);
    }
    line(x[2],y[2],x[0],y[0]);
    getch();
    cleardevice();
    for(i=0;i <3;i++)
    {
    x[i]=xvmin+((x[i]-xwmin)*sx);
    y[i]=yvmin+((y[i]-ywmin)*sy);
    }
    outtextxy(150,10,"view port");
    rectangle(xvmin,yvmin,xvmax,yvmax);
    for(i=0;i <2;i++)
    {
    line(x[i],y[i],x[i+1],y[i+1]);
    }
    line(x[2],y[2],x[0],y[0]);
    getch();
}


OUTPUT:
 




  


Sunday, February 14, 2010

color model

#include"stdio.h"
#include"conio.h"
#include"graphics.h"
#include"stdlib.h"
void main()
{
int gd=DETECT,gm,n;
float r=0,g=0,b=0;
float y=0,i=0,q=0;
float c=0,m=0,y1=0;
initgraph(&gd,&gm,"");
printf("\t(r,g,b)keys for incrementing R,G,B values respectively\n");
printf("\t(shift+(r,g,b))keys for decrementing R,G,B values respectively\n");
printf("\tpress esc to exit\n");
setcolor(15);
while(1)
{
gotoxy(18,10);
printf("R G B");
c=1.0-r;
m=1.0-g;
y1=1.0-y;
gotoxy(47,10);
printf("C M Y");
y=0.299*r+0.587*g+0.144*b;
i=0.596*r-0.275*g-0.3218*b;
q=0.212*r-0.528*g+0.311*b;
gotoxy(18,23);
printf("Y I Q");
switch(getch())
{
case 'r':
r++;
break;
case 'g':
g++;
break;
case 'b':
b++;
break;
case 'R':
r--;
break;
case 'G':
g--;
break;
case 'B':
b--;
break;
case 27:
closegraph();
exit(0);
}
if(r>255)
r=0;
if(g>255)
g=0;
if(b > 255)
b=0;
setrgbpalette(1,r,g,b);
setfillstyle(1,1);
bar(50,50,270,250);
rectangle(50,50,270,250);
setrgbpalette(2,c,m,y1);
setfillstyle(1,2);
bar(275,50,495,250);
rectangle(275,50,495,250);
setrgbpalette(3,y,i,q);
setfillstyle(1,3);
bar(50,255,270,455);
rectangle(50,255,270,455);
}
}
OUTPUT:




Monday, February 1, 2010

3d transformation

#include"stdio.h"
#include"conio.h"
#include"graphics.h"
#include"math.h"
void main()
{
int op,poly[20],poly1[20],poly2[20],poly3[20],tx,ty,sx,sy,xr,yr,a,i,n,t;
int gd=DETECT,gm;
clrscr();
initgraph(&gd,&gm," ");
printf("\tenter the no of edges:");
scanf("%d",&n);
n=n+1;
t=2*n;
for(i=0;i < t;i+=2)
{
printf("\tenter the x and y co-ordinates");
scanf("%d%d",&poly[i],&poly[i+1]);
poly[i]=poly[i]+40;
poly[i+1]=poly[i+1]+40;
poly1[i]=poly[i]+90;
poly1[i+1]=poly[i+1]+90;
}
poly[t]=poly[0];
poly[t+1]=poly[1];
poly1[t]=poly1[0];
poly1[t+1]=poly1[1];
do
{
sleep(2);
clrscr();
cleardevice();
outtextxy(120,120,"original image");
drawpoly(n,poly);
drawpoly(n,poly1);
for(i=0;i line(poly[i],poly[i+1],poly1[i],poly1[i+1]);
printf("\t\t3D TRANFORMATION:\n\t1.translation\n\t2.scaling\n\t3.rotate\n\t4.exit\n");
printf("\n\n\n\nenter the your option:");
scanf("%d",&op);
switch(op)
{
case 1:
printf("\n\tenter the translation factor:");
scanf("%d %d",&tx,&ty);
for(i=0;i < t;i+=2)
{
poly2[i]=poly[i]+tx;
poly2[i+1]=poly[i+1]+ty;
poly3[i]=poly1[i]+tx;
poly3[i+1]=poly1[i+1]+ty;
}
poly2[t]=poly2[0];
poly2[t+1]=poly2[1];
poly3[t]=poly3[0];
poly3[t+1]=poly3[1];
drawpoly(n,poly2);
drawpoly(n,poly3);
for(i=0;i line(poly2[i],poly2[i+1],poly3[i],poly3[i+1]);
break;
case 2:
printf("\t enter the scaling factor:");
scanf("%d%d",&sx,&sy);
for(i=0;i < t ;i+=2)
{
poly2[i]=poly[i]*sx;
poly2[i+1]=poly[i+1]*sy;
poly3[i]=poly1[i]*sx;
poly3[i+1]=poly1[i+1]*sy;
}
poly2[t]=poly2[0];
poly2[t+1]=poly2[1];
poly3[t]=poly3[0];
poly3[t+1]=poly3[1];
drawpoly(n,poly2);
drawpoly(n,poly3);
for(i=0;i line(poly2[i],poly2[i+1],poly3[i],poly3[i+1]);
break;
case 3:
printf("\tenter rotation factor:");
scanf("%d %d%d",&xr,&yr,&a);
for(i=0;i < t;i+=2)
{
poly2[i]=xr+((poly[i]-xr)*cos(a))-((poly[i+1]-yr)*sin(a));
poly2[i+1]=yr+((poly[i+1]-yr)*cos(a))-((poly[i]-xr)*sin(a));
poly3[i]=xr+((poly1[i]-xr)*sin(a))+((poly1[i+1]-yr)*cos(a));
poly3[i+1]=yr+((poly1[i+1]-yr)*sin(a))+((poly1[i]-xr)*cos(a));
}
poly2[t]=poly2[0];
poly2[t+1]=poly2[1];
poly3[t]=poly3[0];
poly3[t+1]=poly3[1];
drawpoly(n,poly2);
drawpoly(n,poly3);
for(i=0;i line(poly2[i],poly2[i+1],poly3[i],poly3[i+1]);
sleep(2);
break;
case 4:
exit(0);
}
}
while(op < =4);
getch();
closegraph();
}