Program:
#include
#include
#include
#define round(a)((int)(a+0.5))
int gd=DETECT,gm;
long int p,x,y,px,py,rx2,ry2,tworx2,twory2,xc,yc,rx,ry;
void ellipseplotpoints(int xc,int yc,int x,int y)
{
putpixel(xc+x,yc+y,12);
putpixel(xc-x,yc+y,12);
putpixel(xc+x,yc-y,12);
putpixel(xc-x,yc-y,12);
}
void main()
{
initgraph(&gd,&gm,"");
printf("Enter the center\n");
scanf("%d%d",&xc,&yc);
printf("Enter the x and y Radii\n");
scanf("%d%d",&rx,&ry);
ry2=ry*ry;
rx2=rx*rx;
twory2=2*ry2;
tworx2=2*rx2;
x=0;
y=ry;
px=0;
py=tworx2*y;
ellipseplotpoints(xc,yc,x,y);
p=round(ry2-rx2*ry+(0.25*rx2));
while(px
{
x=x+1;
px=px+twory2;
if(p<0)
p+=ry2+px;
else
{
y=y-1;
py=py-tworx2;
p=p+ry2+px-py;
}
ellipseplotpoints(xc,yc,x,y);
}
p=round(ry2*(x+0.5)*(x+0.5)+rx2*(y-1)-rx2*ry2);
while(y>0)
{
y=y-1;
py=py-tworx2;
if(p>=0)
p+=rx2-py;
else
{
x=x+1;
px=px+twory2;
p=p+rx2-py+px;
}
ellipseplotpoints(xc,yc,x,y);
}
getch();
closegraph();
}
Sample I/O:

#include
#include
#include
void vwin();
void window();
void clip(float,float,float,float);
float x1,x2,y1,y2,xv1,xv2,yv1,yv2,y, vx1,vx2,vy2,vy1;
float xi[10],yi[10];
int i,k,count=0;
void main()
{
float sx,sy;
int n,j;
float xl[10],yl[10];
int gd=DETECT,gm;
printf("\nEnter xwmin and ywmin : ");
scanf("%f%f",&x1,&y1);
printf("\nEnter xwmax and ywmax : ");
scanf("%f%f",&x2,&y2);
printf("\nEnter the no. of points in the polygon : ");
scanf("%d",&n);
for(i=0;i
{
printf(" point %d:",i+1);
scanf("%f%f",&xl[i],&yl[i]);
}
initgraph(&gd,&gm,"");
y=getmaxy();
window();
getch();
for(i=0;i
{
j=(i+1)%n;
line(xl[i],y-yl[i],xl[j],y-yl[j]);
getch();
}
getch();
cleardevice();
window();
k=0;
while(k
{
j=(k+1)%n;
clip(xl[k],yl[k],xl[j],yl[j]);
k++;
}
getch();
cleardevice();
printf("\n Enter view port coordinates : ");
scanf("%f%f%f%f",&xv1,&yv1,&xv2,&yv2);
sx=(xv2-xv1)/(x2-x1);
sy=(yv2-yv1)/(y2-y1);
vwin();
getch();
for(k=0;k
{
vx1=xv1+(xi[k]-x1)*sx;
vy1=yv1+(yi[k]-y1)*sy;
vx2=xv1+(xi[k+1]-x1)*sx;
vy2=yv1+(yi[k+1]-y1)*sy;
line(vx1,y-vy1,vx2,y-vy2);
k++;
}
getch();
closegraph();
}
void clip(float xl1,float yl1,float xl2,float yl2)
{
int f=0,rg1[4],rg2[4];
float xi1,yi1,xi2,yi2, m;
for(i=0;i<4;i++)
{
rg1[i]=0;
rg2[i]=0;
}
if(xl1
rg1[3]=1;
if(xl1>x2)
rg1[2]=1;
if(yl1
rg1[1]=1;
if(yl1>y2)
rg1[0]=1;
if(xl2
rg2[3]=1;
if(xl2>x2)
rg2[2]=1;
if(yl2
rg2[1]=1;
if(yl2>y2)
rg2[0]=1;
for(i=0;i<4;i++)
{
if(rg1[i]==1)
f=1;
if(rg2[i]==1)
f=1;
}
xi1=xl1;
yi1=yl1;
xi2=xl2;
yi2=yl2;
if(f==0)
goto last;
f=0;
for(i=0;i<4;i++)
{
if(rg1[i]==1&&rg2[i]==1)
f=1;
}
if(f==1)
{
goto last2;
}
if((xl2-xl1)!=0)
m=(yl2-yl1)/(xl2-xl1);
else
m=0;
if(rg1[3]==1)
{
yi1=abs(yl1+m*(x1-xl1));
xi1=x1;
if(yi1
goto reg1;
}
if(rg1[2]==1)
{
yi1=abs(yl1+m*(x2-xl1));
xi1=x2;
if(yi1
goto reg1;
}
if(rg1[1]==1)
{
if(m!=0)
xi1=abs(xl1+(y1-yl1)/m);
yi1=y1;
if(xi1
goto reg1;
}
if(rg1[0]==1)
{
if(m!=0)
xi1=abs(xl1+(y2-yl1)/m);
yi1=y2;
if(xi1
goto reg1;
}
reg1:
if(rg2[3]==1)
{
yi2=abs(yl2+m*(x1-xl2));
xi2=x1;
if(yi2
goto reg2;
}
if(rg2[2]==1)
{
yi2=abs(yl2+m*(x2-xl2));
xi2=x2;
if(yi2
goto reg2;
}
if(rg2[1]==1)
{
if(m!=0)
xi2=abs(xl2+(y1-yl2)/m);
yi2=y1;
if(xi2
goto reg2;
}
if(rg2[0]==1)
{
if(m!=0)
xi2=abs(xl2+(y2-yl2)/m);
yi2=y2;
if(xi2
goto reg2;
}
reg2:
last:
line(xi1,y-yi1,xi2,y-yi2);
xi[count]=xi1;
yi[count]=yi1;
count++;
xi[count]=xi2;
yi[count]=yi2;
count++;
last2:
}
void window()
{
line(x1,y-y1,x1,y-y2);
line(x1,y-y2,x2,y-y2);
line(x2,y-y2,x2,y-y1);
line(x2,y-y1,x1,y-y1);
}
void vwin()
{
line(xv1,y-yv1,xv1,y-yv2);
line(xv1,y-yv2,xv2,y-yv2);
line(xv2,y-yv2,xv2,y-yv1);
line(xv2,y-yv1,xv1,y-yv1);
}
SAMPLE INPUT OUTPUT
---------------------------------




#include
#include
#include
void window();
int rg1[4],rg2[4];
float xi1,yi1,xi2,yi2,xl1,xl2,yl1,yl2;
float x1,y1,x2,y2,y;
void main()
{
int i,f=0;
float m;
int gd=DETECT,gm;
initgraph(&gd,&gm,"");
y=getmaxy();
printf("Enter the left bottom corner of the clip window : ");
scanf("%f%f",&x1,&y1);
printf("Enter the right top corner of the clip window : ");
scanf("%f%f",&x2,&y2);
printf("Enter the line co-ordinates : ");
scanf("%f%f%f%f",&xl1,&yl1,&xl2,&yl2);
window();
getch();
line(xl1,y-yl1,xl2,y-yl2);
getch();
for(i=0;i<4;i++)
{
rg1[i]=0;
rg2[i]=0;
}
if(xl1
rg1[3]=1;
if(xl1>x2)
rg1[2]=1;
if(yl1
rg1[1]=1;
if(yl1>y2)
rg1[0]=1;
if(xl2
rg2[3]=1;
if(xl2>x2)
rg2[2]=1;
if(yl2
rg2[1]=1;
if(yl2>y2)
rg2[0]=1;
printf("Region Code 1 : %d%d%d%d\n",rg1[0],rg1[1],rg1[2],rg1[3]);
printf("Region Code 2 : %d%d%d%d",rg2[0],rg2[1],rg2[2],rg2[3]);
getch();
for(i=0;i<4;i++)
{
if(rg1[i]==1)
f=1;
if(rg2[i]==1)
f=1;
}
xi1=xl1;
yi1=yl1;
xi2=xl2;
yi2=yl2;
if(f==0)
goto last;
if((xl2-xl1)!=0)
{
m=(yl2-yl1)/(xl2-xl1);
//m=m+1;
}
if((yl2-yl1)==0)
m=0;
if((xl2-xl1)==0)
{
xi1=xi2=xl1;
yi1=y1;
yi2=y2;
goto new;
}
if(rg1[3]==1)
{
yi1=yl1+m*(x1-xl1);
xi1=x1;
}
if(rg1[2]==1)
{
yi1=yl1+m*(x2-xl1);
xi1=x2;
}
if(rg1[1]==1)
{
xi1=xl1+(y1-yl1)/m;
yi1=y1;
}
if(rg1[0]==1)
{
xi1=xl1+(y2-yl1)/m;
yi1=y2;
}
if(rg2[3]==1)
{
yi2=yl2+m*(x1-xl2);
xi2=x1;
}
if(rg2[2]==1)
{
yi2=yl2+m*(x2-xl2);
xi2=x2;
}
if(rg2[1]==1)
{
xi2=xl2+(y1-yl2)/m;
yi2=y1;
}
if(rg2[0]==1)
{
xi2=xl2+(y2-xl2)/m;
yi2=y2;
}
new:
cleardevice();
printf("\nthe slope is %f",m);
printf("\nthe 1st intersection(or the 1st end) co-ord are: (%f,%f)",xi1,yi1);
printf("\nthe 2nd intersection(or the 2nd end) co-ord are: (%f,%f)",xi2,yi2);
getch();
window();
getch();
setcolor(YELLOW);
line(xi1,y-yi1,xi2,y-yi2);
last: getch();
closegraph();
}
void window()
{
line(x1,y-y1,x1,y-y2);
line(x1,y-y2,x2,y-y2);
line(x2,y-y2,x2,y-y1);
line(x2,y-y1,x1,y-y1);
}
SAMPLE INPUT OUTPUT
----------------------------------









