CG File
description
Transcript of CG File
1
Maharishi Markandeshwar University, Sadopur, Ambala
Date :
Program No. : 1
Aim : Write a program to implement DDA line drawing algorithm.
#include<stdio.h>#include<conio.h>#include<graphics.h>void main(){
int x,y,x1,x2,y1,y2,k,dx,dy,s,xi,yi;int gdriver=DETECT,gmode;initgraph(&gdriver,&gmode,":");printf("Enter First Point : ");scanf("%d%d",&x1,&y1);printf("Enter Second Point : ");scanf("%d%d",&x2,&y2);x=x1;y=y1;putpixel(x,y,6);dx=x2-x1;dy=y2-y1;if(abs(dx)>abs(dy))
s=abs(dx);else
s=abs(dy);xi=dx/s;yi=dy/s;putpixel(x,y,7);for(k=0;k<s;k++){
x=x+xi;y=y+yi;putpixel(x,y,7);
}getch();closegraph();
}Output :
2
Maharishi Markandeshwar University, Sadopur, Ambala
Date :Program No. : 2
Aim : Write a program to implement Bresenham’s line drawing algorithm.
#include<graphics.h>#include<stdio.h>#include<conio.h>void main(){
int x,y,x1,y1,x2,y2,dx,dy,p;int gdriver=DETECT,gmode;initgraph(&gdriver,&gmode,"C:\\TC\\BGI");printf("Enter values of x1 and y1: ");scanf("%d %d",&x1,&y1);printf("Enter values of x2 and y2 : ");scanf("%d %d",&x2,&y2);dx=x2-x1;dy=y2-y1;p = 2 * (dy) - (dx);x=x1;y=y1;putpixel(x,y,WHITE);while(x<=x2){
if(p<0)p=p+(2*dy);
else{
p=p+(2*dy)-(2*dx);y++;
}x++;putpixel(x,y,WHITE);
}getch();
}
Output :
3
Maharishi Markandeshwar University, Sadopur, Ambala
Date :Program No. : 3
Aim : Write a program to implement the Bresenham’s circle drawing algorithm.
#include<stdio.h>#include<conio.h>#include<graphics.h>void circlepoints(int,int);void main(){
int x,y,p,r;int gdriver=DETECT,gmode;initgraph(&gdriver,&gmode,"C:\\tc\\bgi:");clrscr();printf("enter the radius");scanf("%d",&r);x=0;y=r;p=1-r;while(x<y){
x++;if(p>0){
p=p+2*(x-y)+1;y--;
}else
p=p+2*x+1;circlepoints(x,y);
}getch();closegraph();
}void circlepoints(int x,int y){
putpixel(x+300,y+300,8);putpixel(x+300,-y+300,8);putpixel(-x+300,y+300,8);putpixel(-x+300,-y+300,8);putpixel(y+300,x+300,8);putpixel(y+300,-x+300,8);putpixel(-y+300,x+300,8);putpixel(-y+300,-x+300,8);
}
5
Maharishi Markandeshwar University, Sadopur, Ambala
Date :Program No. : 4
Aim : Write a program to implement decagon whose each vertex is connected.
#include<graphics.h>#include<stdio.h>#include<conio.h>void ecagon(const int, const int []);void main(){
int decagonpoints[12] = {400,360,365,325,400,290,485, 325,450,360,400,360};int gdriver= DETECT, gmode;initgraph(&gdriver,&gmode,":");setbkcolor(WHITE);setcolor(RED);ecagon (6,decagonpoints);getch();
}void ecagon( const int n, const int cdr [] ){
int c,i ;if(n>=2){
for(c=0; c< (n-1); c++){
for(i=0; i<=(n-2) && (c<=2); i=i+2)line(cdr [ (c*2)], cdr [(c*2)+1], cdr [((c+1)*2)+i], cdr[((( c+1)*2)+1)+i]);
if(c>2)line(cdr[(c*2)],cdr[(c*2)+1], cdr[((c+1)*2)],cdr[((( c+1)*2)+1)]);
}}
}
Output :
6
Maharishi Markandeshwar University, Sadopur, Ambala
Date :Program No. : 5
Aim : Write a program to implement Boundary fill. algorithm.
#include<graphics.h>#include<stdio.h>#include<conio.h>#include<math.h>void boundary(const int,const int,const int,const int);void polygon(const int,const int[]);void main(){
int t=7;int polygon_points[14]={365,325,400,290,450,290,485,325,450,360,400,360,365,325};int driver= DETECT, mode;initgraph(&driver,&mode,"d:\\tc\\bgi");setcolor(10);polygon(t,polygon_points);boundary(425,325,15,10);getch();closegraph();
}void boundary(const int x,const int y,const int fill_color,const int boundary_color){
if(getpixel(x,y)!=boundary_color && getpixel(x,y)!=fill_color){
putpixel(x,y,fill_color);boundary((x+1),y,fill_color,boundary_color);boundary((x-1),y,fill_color,boundary_color);boundary(x,(y+1),fill_color,boundary_color);boundary(x,(y-1),fill_color,boundary_color);
}}void polygon(const int n,const int cdr[]){
int count;if (n>=2){
line(cdr[0],cdr[1],cdr[2],cdr[3]);for(count=1;count<(n-1);count++)
line(cdr[(count*2)],cdr[(count*2)+1],cdr[((count+1)*2)],cdr[(((count+1)*2)+1)]);}
} Output :
7
Maharishi Markandeshwar University, Sadopur, Ambala
Date :Program No. : 6
Aim : Write a program to implement Cohen Sutherland line clipping algorithm.
#include<stdio.h>#include<conio.h>#include<graphics.h>void main(){ int gd=DETECT, gm; float i,xmax,ymax,xmin,ymin,x1,y1,x2,y2,m; float start[4],end[4],code[4]; clrscr(); initgraph(&gd,&gm,"C:\\TC\\BGI"); printf("Enter the bottom-left coordinate of viewport: "); scanf("%f%f",&xmin,&ymin); printf("Enter the top-right coordinate of viewport: "); scanf("%f%f",&xmax,&ymax); printf("Enter the coordinates for starting point of line: "); scanf("%f%f",&x1,&y1); printf("Enter the coordinates for ending point of line: "); scanf("%f%f",&x2,&y2); for(i=0;i<4;i++) { start[i]=0; end[i]=0; } m=(y2-y1)/(x2-x1); if(x1<xmin) start[0]=1; if(x1>xmax) start[1]=1; if(y1>ymax) start[2]=1; if(y1<ymin) start[3]=1; if(x2<xmin) end[0]=1; if(x2>xmax) end[1]=1; if(y2>ymax) end[2]=1; if(y2<ymin) end[3]=1; for(i=0;i<4;i++) code[i]=start[i]&&end[i]; if((code[0]==0)&&(code[1]==0)&&(code[2]==0)&&(code[3]==0)) {
if((start[0]==0)&&(start[1]==0)&&(start[2]==0)&&(start[3]==0)&&(end[0]==0)&&(end[1]==0)&&(end[2]==0)&&(end[3]==0))
{ cleardevice(); printf("\nThe line is totally visible\nand not a clipping candidate"); rectangle(xmin,ymin,xmax,ymax); line(x1,y1,x2,y2); getch(); } else {
cleardevice();printf("\nLine is partially visible");
8
Maharishi Markandeshwar University, Sadopur, Ambala
Date : rectangle(xmin,ymin,xmax,ymax); line(x1,y1,x2,y2); getch();
if((start[2]==0)&&(start[3]==1)) {
x1=x1+(ymin-y1)/m; y1=ymin;
} if((end[2]==0)&&(end[3]==1)) {
x2=x2+(ymin-y2)/m;y2=ymin;
} if((start[2]==1)&&(start[3]==0)) {
x1=x1+(ymax-y1)/m; y1=ymax;
} if((end[2]==1)&&(end[3]==0)) {
x2=x2+(ymax-y2)/m;y2=ymax;
} if((start[1]==0)&&(start[0]==1)) {
y1=y1+m*(xmin-x1); x1=xmin;
} if((end[1]==0)&&(end[0]==1)) {
y2=y2+m*(xmin-x2); x2=xmin;
} if((start[1]==1)&&(start[0]==0)) {
y1=y1+m*(xmax-x1); x1=xmax;
} if((end[1]==1)&&(end[0]==0)) {
y2=y2+m*(xmax-x2);x2=xmax;
} clrscr(); cleardevice(); printf("\nAfter clippling:"); rectangle(xmin,ymin,xmax,ymax); line(x1,y1,x2,y2); getch(); } } else {
clrscr();
9
Maharishi Markandeshwar University, Sadopur, Ambala
Date : cleardevice(); printf("\nLine is invisible"); rectangle(xmin,ymin,xmax,ymax);
} getch(); closegraph(); }
Output :
11
Maharishi Markandeshwar University, Sadopur, Ambala
Date :Program No. : 7
Aim : Write a program to implement 2d transformation:
1) Transformation 2) Scaling 3) Rotation
#include<stdio.h>#include<conio.h>#include<graphics.h>#include<math.h>
void translate(int,int);void scale(float,float);void rotate(float);
void main(){ int ch; int gd=DETECT,gm; int tx,ty; float sx,sy; float theta; initgraph(&gd,&gm,"c:\\tc\\bgi"); outtextxy(20,100,"Object."); outtextxy(20,110,"-------"); rectangle(100,250,150,200); printf("---MENU---"); printf("\n 1)Translate\n 2)Scale\n 3)Rotate"); printf("\nEnter your choice: "); scanf("%d",&ch); cleardevice(); switch(ch) { case 1: outtextxy(10,45,"Enter value of tx and ty:"); scanf("%d %d",&tx,&ty); translate(tx,ty); break; case 2: outtextxy(10,45,"Enter the value of sx and sy:"); scanf("%f%f",&sx,&sy); scale(sx,sy); break; case 3: outtextxy(10,50,"Enter the angle for rotation: "); scanf("%f",&theta); rotate(theta); break; default: printf("Invalid choice!!!!"); break; } getch(); closegraph();
12
Maharishi Markandeshwar University, Sadopur, Ambala
Date :}
void translate(int tx,int ty){ outtextxy(240,10,"TRANSLATION"); outtextxy(238,20,"------------"); rectangle(100,250,150,200); rectangle(100+tx,250+ty,150+tx,200+ty);}
void scale(float sx,float sy){ outtextxy(240,10,"SCALING"); outtextxy(238,20,"--------"); rectangle(100,250,150,200); rectangle(100*sx,250*sy,150*sx,200*sy);}
void rotate(float theta){ int x1,x2,x3,x4; int y1,y2,y3,y4; int ax1,ax2,ax3,ax4,ay1,ay2,ay3,ay4; int refx,refy; theta=theta*(3.14/180); outtextxy(240,10,"ROTATE"); outtextxy(238,20,"-------"); refx=100; refy=100; x1=100; y1=100; x2=150; y2=100; x3=150; y3=150; x4=100; y4=150; ax1=refy+(x1-refx)*cos(theta)-(y1-refy)*sin(theta); ay1=refy+(x1-refx)*sin(theta)+(y1-refy)*cos(theta); ax2=refy+(x2-refx)*cos(theta)-(y2-refy)*sin(theta); ay2=refy+(x2-refx)*sin(theta)+(y2-refy)*cos(theta); ax3=refy+(x3-refx)*cos(theta)-(y3-refy)*sin(theta); ay3=refy+(x3-refx)*sin(theta)+(y3-refy)*cos(theta); ax4=refy+(x4-refx)*cos(theta)-(y4-refy)*sin(theta); ay4=refy+(x4-refx)*sin(theta)+(y4-refy)*cos(theta); rectangle(100,150,150,100); line(ax1,ay1,ax2,ay2); line(ax2,ay2,ax3,ay3); line(ax3,ay3,ax4,ay4); line(ax4,ay4,ax1,ay1);}
15
Maharishi Markandeshwar University, Sadopur, Ambala
Date :Program No. : 8
Aim : Write a program to implement Bezier curves for a given set of control points.
#include<stdio.h>#include<stdlib.h>#include<graphics.h>#include<math.h>
void bezier(int x[4],int y[4]){ int i; double t; int gd=DETECT,gm; initgraph(&gd,&gm,"C:\\TC\\BGI"); setbkcolor(WHITE); for(t=0.0;t<1.0;t+=0.0005) {
double xt=pow(1-t,3)*x[0]+3*t*pow(1-t,2)*x[1]+3*pow(t,2)*(1-t)*x[2]+pow(t,3)*x[3];double yt=pow(1-t,3)*y[0]+3*t*pow(1-t,2)*y[1]+3*pow(t,2)*(1-t)*y[2]+pow(t,3)*y[3];putpixel(xt,yt,12);
} for(i=0;i<4;i++)
putpixel(x[i],y[i],BLUE); getch(); closegraph(); return;}void main(){ int x[4],y[4]; int i; clrscr(); printf("Enter the x - and y -coordinates of the four control points.\n"); for (i=0;i<4;i++)
scanf("%d%d",&x[i],&y[i]); bezier(x,y);}
17
Maharishi Markandeshwar University, Sadopur, Ambala
Date :Program No. : 9
Aim : Write a program to implement Scan Line Polygon Filling Algorithm.
#include<stdio.h>#include<conio.h>#include<graphics.h>main(){
int n,i,j,k,gd,gm,dy,dx;int x,y,temp;int a[20][2],xi[20];float slope[20];clrscr();printf("\nEnter the no. of edges of polygon : ");scanf("%d",&n);printf("\nEnter the cordinates of polygon :\n");for(i=0;i<n;i++){
printf("X%d Y%d : ",i,i);scanf("%d %d",&a[i][0],&a[i][1]);
}a[n][0]=a[0][0];a[n][1]=a[0][1];detectgraph(&gd,&gm);initgraph(&gd,&gm,"c:\\tc\\bgi");for(i=0;i<n;i++){
line(a[i][0],a[i][1],a[i+1][0],a[i+1][1]);}getch();for(i=0;i<n;i++){
dy=a[i+1][1]-a[i][1];dx=a[i+1][0]-a[i][0];if(dy==0) slope[i]=1.0;if(dx==0) slope[i]=0.0;if((dy!=0)&&(dx!=0)){
slope[i]=(float) dx/dy;}
}for(y=0;y< 480;y++){
k=0;for(i=0;i<n;i++){
if( ((a[i][1]<=y)&&(a[i+1][1]>y))||((a[i][1]>y)&&(a[i+1][1]<=y))){
xi[k]=(int)(a[i][0]+slope[i]*(y-a[i][1]));k++;
}}for(j=0;j<k-1;j++)
18
Maharishi Markandeshwar University, Sadopur, Ambala
Date :for(i=0;i<k-1;i++){
if(xi[i]>xi[i+1]){
temp=xi[i];xi[i]=xi[i+1];xi[i+1]=temp;
}}setcolor(30);for(i=0;i<k;i+=2){
line(xi[i],y,xi[i+1]+1,y);delay(20);
}}
}
Output :