computer graphics lab assignment

28
Program 1 WRITE A C PROGRAM TO DRAW LINE BY USING DDA ALGORITHM. #include <graphics.h> #include <stdio.h> #include <math.h> int main( ) { float x,y,x1,y1,x2,y2,dx,dy,pixel; int i,gd,gm; printf("Enter the value of x1 : "); scanf("%f",&x1); printf("Enter the value of y1 : "); scanf("%f",&y1); printf("Enter the value of x2 : "); scanf("%f",&x2); printf("Enter the value of y1 : "); scanf("%f",&y2); detectgraph(&gd,&gm); initgraph(&gd,&gm,""); dx=abs(x2-x1); dy=abs(y2-y1); if(dx>=dy) pixel=dx; else pixel=dy; dx=dx/pixel; dy=dy/pixel; 1

Upload: abdullah-al-shiam

Post on 16-Feb-2017

224 views

Category:

Engineering


12 download

TRANSCRIPT

Page 1: Computer graphics lab assignment

Program 1WRITE A C PROGRAM TO DRAW LINE BY USING DDA ALGORITHM.

#include <graphics.h>#include <stdio.h>#include <math.h>

int main( ){ float x,y,x1,y1,x2,y2,dx,dy,pixel; int i,gd,gm;

printf("Enter the value of x1 : "); scanf("%f",&x1); printf("Enter the value of y1 : "); scanf("%f",&y1); printf("Enter the value of x2 : "); scanf("%f",&x2); printf("Enter the value of y1 : "); scanf("%f",&y2);

detectgraph(&gd,&gm); initgraph(&gd,&gm,"");

dx=abs(x2-x1); dy=abs(y2-y1);

if(dx>=dy) pixel=dx; else pixel=dy;

dx=dx/pixel; dy=dy/pixel;

x=x1; y=y1;

i=1; while(i<=pixel) { putpixel(x,y,1);

1

Page 2: Computer graphics lab assignment

x=x+dx; y=y+dy; i=i+1; delay(100); } getch(); closegraph();}

OUTPUT:

2

Page 3: Computer graphics lab assignment

Program 2WRITE A C PROGRAM TO DRAW LINE BY USING BRESENHAM'S ALGORITHM.

# include <stdio.h># include <conio.h># include <graphics.h>

void main(){int dx,dy,x,y,p,x1,y1,x2,y2;int gd,gm;

printf("\n\n\tEnter the co-ordinates of first point : ");scanf("%d %d",&x1,&y1);printf("\n\n\tEnter the co-ordinates of second point : ");scanf("%d %d",&x2,&y2);

dx = (x2 - x1);dy = (y2 - y1);

p = 2 * (dy) - (dx);

x = x1;y = y1;

detectgraph(&gd,&gm);initgraph(&gd,&gm,"e:\\tc\\bgi");putpixel(x,y,WHITE);

while(x <= x2){if(p < 0){x=x+1;y=y;p = p + 2 * (dy);}else{

3

Page 4: Computer graphics lab assignment

x=x+1;y=y+1;p = p + 2 * (dy - dx);}putpixel(x,y,WHITE);}getch();closegraph();

}

OUTPUT:

4

Page 5: Computer graphics lab assignment

Program 3WRITE A C PROGRAM TO DRAW A RECTANGLE.

#include<stdio.h>#include<graphics.h>#include<conio.h> int main(){   int gd = DETECT,gm;   initgraph(&gd, &gm, "C:\\TC\\BGI");    /* Draw rectangle on screen */   rectangle(150, 50, 400, 150);    /* Draw Bar on screen */   bar(150, 200, 400, 350);    getch();   closegraph();   return 0;}

OUTPUT:

5

Page 6: Computer graphics lab assignment

Program 4WRITE A C PROGRAM TO DRAW A CIRCLE.

#include<stdio.h>#include<graphics.h>#include<conio.h>

int main(){ int gd = DETECT,gm; int x ,y ,radius=80; initgraph(&gd, &gm, "C:\\TC\\BGI"); /* Initialize center of circle with center of screen */ x = getmaxx()/2; y = getmaxy()/2;

outtextxy(x-100, 50, "CIRCLE Using Graphics in C"); /* Draw circle on screen */ circle(x, y, radius);

getch(); closegraph(); return 0;}

OUTPUT:

6

Page 7: Computer graphics lab assignment

Program 5WRITE A C PROGRAM TO DRAW A ELLIPSE.

#include<graphics.h>#include<conio.h> main() {

int gd = DETECT, gm; 

initgraph(&gd, &gm, "C:\\TC\\BGI"); 

ellipse(100, 100, 0, 360, 50, 25); 

getch();closegraph();

return 0;}

OUTPUT:

7

Page 8: Computer graphics lab assignment

Program 6

WRITE A C PROGRAM TO DRAW A TORUS.

#include <windows.h>#include <GL/glut.h>#include <stdlib.h>

static void resize(int width, int height){ const float ar = (float) width / (float) height;

glViewport(0, 0, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(-ar, ar, -1.0, 1.0, 2.0, 100.0);

glMatrixMode(GL_MODELVIEW); glLoadIdentity() ;}

static void display(void){

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glColor3d(1,0,0);

glPushMatrix(); glTranslated(0.0,1.5,-6); glRotated(-10, 1.0, 0.0, 0.0); glutSolidTorus(0.4, 0.8, 10, 50); glPopMatrix();

glPushMatrix(); glTranslated(0.0,-1.2,-6); glutWireTorus(0.4, 0.8, 10, 20); glPopMatrix();

glutSwapBuffers();}

8

Page 9: Computer graphics lab assignment

const GLfloat light_ambient[] = { 0.0f, 0.0f, 0.0f, 1.0f };const GLfloat light_diffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f };const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };

const GLfloat mat_ambient[] = { 0.7f, 0.7f, 0.7f, 1.0f };const GLfloat mat_diffuse[] = { 0.8f, 0.8f, 0.8f, 1.0f };const GLfloat mat_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };const GLfloat high_shininess[] = { 100.0f };

/* Program entry point */

int main(int argc, char *argv[]){ glutInit(&argc, argv); glutInitWindowSize(640,480); glutInitWindowPosition(10,10); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

glutCreateWindow("Programming Techniques - 3D Torus");

glutReshapeFunc(resize); glutDisplayFunc(display);

glClearColor(1,1,1,1); glEnable(GL_CULL_FACE); glCullFace(GL_BACK);

glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LESS);

glEnable(GL_LIGHT0); glEnable(GL_NORMALIZE); glEnable(GL_COLOR_MATERIAL); glEnable(GL_LIGHTING);

glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); glLightfv(GL_LIGHT0, GL_POSITION, light_position);

glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);

9

Page 10: Computer graphics lab assignment

glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);

glutMainLoop();

return EXIT_SUCCESS;}

OUTPUT:

10

Page 11: Computer graphics lab assignment

Program 7WRITE A C PROGRAM TO SCALE AN OBJECT.

#include<stdio.h>#include<conio.h>#include<graphics.h>#include<process.h>#include<math.h>

int x1,y1,x2,y2,x3,y3,mx,my;void draw();void scale();

void main(){ int gd=DETECT,gm; int c; initgraph(&gd,&gm," "); printf("Enter the 1st point for the triangle:"); scanf("%d%d",&x1,&y1); printf("Enter the 2nd point for the triangle:"); scanf("%d%d",&x2,&y2); printf("Enter the 3rd point for the triangle:"); scanf("%d%d",&x3,&y3); draw(); scale();}

void draw(){ line(x1,y1,x2,y2); line(x2,y2,x3,y3); line(x3,y3,x1,y1);}

void scale(){ int x,y,a1,a2,a3,b1,b2,b3; int mx,my; printf("Enter the scalling coordinates"); scanf("%d%d",&x,&y); mx=(x1+x2+x3)/3;

11

Page 12: Computer graphics lab assignment

my=(y1+y2+y3)/3; cleardevice(); a1=mx+(x1-mx)*x; b1=my+(y1-my)*y; a2=mx+(x2-mx)*x; b2=my+(y2-my)*y; a3=mx+(x3-mx)*x; b3=my+(y3-my)*y; line(a1,b1,a2,b2); line(a2,b2,a3,b3); line(a3,b3,a1,b1); draw(); getch();}

OUTPUT:

12

Page 13: Computer graphics lab assignment

Program 8WRITE A C PROGRAM TO ROTATE AN OBJECT.

#include<stdio.h>#include<graphics.h>void main(){int gd=DETECT,gm;int x1,y1,x2,y2 ;float b1,b2;float t,deg;initgraph(&gd,&gm,”c:\\tc\\”);printf(“Enter the coordinates of Line \n”);

scanf(“%d%d%d%d”,&x1,&y1,&x2,&y2);setcolor(6);line(x1,y1,x2,y2);getch();

//cleardevice();printf(“Enter the angle of rotation: “);scanf(“%f”,&deg);t=(22*deg)/(180*7);b1=abs((x2*cos(t))-(y2*sin(t)));b2=abs((x2*sin(t))+(y2*cos(t)));line(x1,y1,b1,b2);getch();closegraph();}

13

Page 14: Computer graphics lab assignment

OUTPUT:

Program 9WRITE A C PROGRAM TO SHEAR AN OBJECT ABOUT X-SHEAR, Y-SHEAR.

#include<stdio.h>#include<conio.h>#include<dos.h>#include<graphics.h>int main(){int poly[30],a[9][3],b[3][3],c[9][3],poly2[30];int x=0,y=0,p,i,j,k,xc,yc,ch;int gd=DETECT,gm;

14

Page 15: Computer graphics lab assignment

initgraph(&gd,&gm,"C:/TC/BGI");xc=getmaxx()/2;yc=getmaxy()/2;setcolor(1);setbkcolor(15);setfillstyle(6,3);printf("\n Enter number of points : ");scanf("%d",&p);j=0;for(i=0;i<p*2;i+=2){printf("\n Enter cordinate point x%d and y%d : ",j+1,j+1);scanf("%d",&poly[i]);scanf("%d",&poly[i+1]);j++;}poly[p*2]=poly[0];poly[p*2+1]=poly[1];

for(i=0;i<p*2;i+=2){poly2[i]=xc+poly[i];poly2[i+1]=yc-poly[i+1];}poly2[p*2]=poly2[0];poly2[p*2+1]=poly2[1];fillpoly(p+1,poly2);

line(0,yc,xc*2,yc);line(xc,0,xc,yc*2);

printf("\n Shearing of : \n 1. x \n 2. y \n 3. Both\n enter choice : ");scanf("%d",&ch);if(ch==1){printf("\n Enter x shear value : ");scanf("%d",&x);}if(ch==2){printf("\n Enter y shear value : ");scanf("%d",&y);}

15

Page 16: Computer graphics lab assignment

if(ch==3){printf("\n Enter x shear value : ");scanf("%d",&x);printf("\n Enter y shear value : ");scanf("%d",&y);}

j=0;for(i=0;i<p;i++){ a[i][0]=poly[j]; a[i][1]=poly[++j]; a[i][2]=1; ++j;}if(ch==1){ for(i=0;i<3;i++) { for(j=0;j<3;j++) { b[i][j]=0; if(i==j) { b[i][j]=1; } } } b[1][0]=x;}else if(ch==2){ for(i=0;i<3;i++) { for(j=0;j<3;j++) { b[i][j]=0; if(i==j) { b[i][j]=1; } } }

16

Page 17: Computer graphics lab assignment

b[0][1]=y;}else if(ch==3){ for(i=0;i<3;i++) { for(j=0;j<3;j++) { b[i][j]=0; if(i==j) { b[i][j]=1; } } } b[1][0]=x; b[0][1]=y;}for(i=0;i<p;i++){ for(j=0;j<3;j++) { c[i][j]=0; for(k=0;k<3;k++) { c[i][j]=c[i][j]+a[i][k]*b[k][j]; } } }printf("\n\n\n\n\n\t After Shearing : ");

for(i=0,j=0;i<p;i++,j+=2){poly[j] =xc+c[i][0];poly[j+1]=yc-c[i][1];}poly[j] =poly[0];poly[j+1]=poly[1];setfillstyle(9,2);fillpoly(p+1,poly);getch();closegraph();}

17

Page 18: Computer graphics lab assignment

OUTPUT:

X_SHEAR:

Y-SHEAR:

18

Page 19: Computer graphics lab assignment

Program 10WRITE A PROGRAM TO DEMONSTRATE REFLECTION TRANSFORMATION ABOUT X-AXIS, Y-AXIS AND ORIGIN.

#include<stdio.h>#include<conio.h>#include<dos.h>#include<graphics.h>int main(){int poly[30],a[9][3],b[3][3],c[9][3],poly2[30];int x,y,p,i,j,k,xc,yc;int gd=DETECT,gm;

initgraph(&gd,&gm,"C:/TC/BGI");xc=getmaxx()/2;yc=getmaxy()/2;

setcolor(1);setbkcolor(15);setfillstyle(6,3);printf("\n Enter number of points : ");scanf("%d",&p);j=0;for(i=0;i<p*2;i+=2){printf("\n Enter cordinate point x%d and y%d : ",j+1,j+1);

scanf("%d",&poly[i]);scanf("%d",&poly[i+1]);j++;}poly[p*2]=poly[0];poly[p*2+1]=poly[1];

for(i=0;i<p*2;i+=2){poly2[i]=xc+poly[i];poly2[i+1]=yc-poly[i+1];

19

Page 20: Computer graphics lab assignment

}poly2[p*2]=poly2[0];poly2[p*2+1]=poly2[1];

fillpoly(p+1,poly2);

line(0,yc,xc*2,yc);line(xc,0,xc,yc*2);

printf("\n Reflection about : \n 1. x axis\n 2. y axis\n 3. origin\n enter choice : ");scanf("%d",&x);

j=0;for(i=0;i<p;i++){ a[i][0]=poly[j]; a[i][1]=poly[++j]; a[i][2]=1; ++j;}

if(x==1){ for(i=0;i<3;i++) { for(j=0;j<3;j++) { b[i][j]=0; if(i==j) { b[i][j]=1; } } } b[1][1]=-1;

}else if(x==2){ for(i=0;i<3;i++) {

20

Page 21: Computer graphics lab assignment

for(j=0;j<3;j++) { b[i][j]=0; if(i==j) { b[i][j]=1; } } } b[0][0]=-1;

}else if(x==3){ for(i=0;i<3;i++) { for(j=0;j<3;j++) { b[i][j]=0; if(i==j) { b[i][j]=-1; } } }

b[2][2]=1;

}

for(i=0;i<p;i++){

for(j=0;j<3;j++) { c[i][j]=0; for(k=0;k<3;k++) { c[i][j]=c[i][j]+a[i][k]*b[k][j]; } }

}printf("\n\n\n\n\n\t Reflection : ");

21

Page 22: Computer graphics lab assignment

for(i=0,j=0;i<p;i++,j+=2){poly[j] =xc+c[i][0];poly[j+1]=yc-c[i][1];}poly[j] =poly[0];poly[j+1]=poly[1];

setfillstyle(9,2);fillpoly(p+1,poly);

getch();closegraph();}

OUTPUT:

REFELCTION ABOUT ORIGIN:

22

Page 23: Computer graphics lab assignment

REFELCTION ABOUT X-AXIS:

REFELCTION ABOUT Y-AXIS:

23

Page 24: Computer graphics lab assignment

24