Computer graphics lab assignment
-
Upload
abdullah-al-shiam -
Category
Engineering
-
view
213 -
download
12
Transcript of 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
x=x+dx; y=y+dy; i=i+1; delay(100); } getch(); closegraph();}
OUTPUT:
2
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
x=x+1;y=y+1;p = p + 2 * (dy - dx);}putpixel(x,y,WHITE);}getch();closegraph();
}
OUTPUT:
4
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
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
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
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
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
glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);
glutMainLoop();
return EXIT_SUCCESS;}
OUTPUT:
10
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
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
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”,°);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
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
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
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
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
OUTPUT:
X_SHEAR:
Y-SHEAR:
18
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
}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
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
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
REFELCTION ABOUT X-AXIS:
REFELCTION ABOUT Y-AXIS:
23
24