CG File

26
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(); }

description

Computer Graphics File

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);

}

4

Maharishi Markandeshwar University, Sadopur, Ambala

Date :

Output :

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 :

10

Maharishi Markandeshwar University, Sadopur, Ambala

Date :

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

13

Maharishi Markandeshwar University, Sadopur, Ambala

Date :

Output :

14

Maharishi Markandeshwar University, Sadopur, Ambala

Date :

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

16

Maharishi Markandeshwar University, Sadopur, Ambala

Date :

Output :

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 :

19

Maharishi Markandeshwar University, Sadopur, Ambala

Date :

20

Maharishi Markandeshwar University, Sadopur, Ambala

Date :