cg lab manual (new)

79
COMPUTER GRAPHICS LAB CS2405 Lab Report 2014-2015 VII Semester Submitted By, NAME 311011104XXX DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING K.C.G COLLEGE OF TECHNOLOGY KARAPAKKAM CHENNAI 600 097

Upload: sanjeev-v

Post on 18-Jan-2016

150 views

Category:

Documents


8 download

DESCRIPTION

Cg Lab Manual

TRANSCRIPT

Page 1: Cg Lab Manual (New)

COMPUTER GRAPHICS LAB

CS2405Lab Report

2014-2015VII Semester

Submitted By,NAME

311011104XXX

DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING

K.C.G COLLEGE OF TECHNOLOGY

KARAPAKKAM

CHENNAI 600 097

Page 2: Cg Lab Manual (New)

KCG COLLEGE OF TECHNOLOGYKARAPAKKAM

REG. NO. ___________________

LABORATORY RECORD

Name of the Lab ____COMPUTER GRAPHICS LAB -

(CS2405)_____

Department of ___COMPUTER SCIENCE AND ENGINEERING___

Certified that this is a bonafide record of the work

done by ____________________________ of ____CSE VII

___ Class

in the __COMPUTER ______ Laboratory during the year

2014-2015.

____________________ ____________________

Staff Member in charge H.O.D

____________________ _______________________

INT. Examiner EXT. Examiner

Date of the Examination _______________

Page 3: Cg Lab Manual (New)

3110111040XXXXXXXXX

EX NO :1A DRAWING A LINE USING DDADATE :

AIM:

To write a C Program for Line Drawing using Digital Differential Analyzer (DDA) Method.

ALGORITHM:

1. Start

2. Read the two end points of a line (x1, y1) & (x2, y2).

3. ∆x = x2-x1 &∆y = y2-y1

4. Initialize (x, y) with (x1,y1)

x = x1

y = y1

5. if abs(∆ x) > abs(∆y) then

steps =∆x

else

steps=∆y

6. xincrement =∆x / steps.

7. yincrement =∆y /steps

8. Plot the rounded coordinate (x, y)

9. Initialize counter k=1

10. Start the loop

x = x + xincrement

y = y+ yincrement

11. Plot the rounded coordinate(x, y)

12. Continue the loop till the counter k= steps

13. Stop.

PROGRAM:

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

int gd = DETECT, gm;

1

Page 4: Cg Lab Manual (New)

3110111040XXXXXXXXX

int x1, y1, x2, y2,dx,dy,steps,k;float xincrement,yincrement,x,y;initgraph(&gd, &gm, "..\\bgi");

printf("Enter the Starting Point of x axis : ");scanf("%d", &x1);

printf("Enter the Starting of y axis : ");scanf("%d", &y1);

printf("Enter the End Point of x axis : ");scanf("%d", &x2);

printf("Enter the End Point of y axis : ");scanf("%d", &y2);clrscr();dx = x2 – x1;dy = y2 – y1;x=x1;y=y1;if(abs(dx) > abs(dy))

steps=abs(dx);else

steps=abs(dy);xincrement=dx/(float)steps;yincrement=dy/(float)steps;putpixel(ceil(x), ceil(y), RED);for(k=1;k<=steps;k++){

x=x+xincrement;y=y+yincrement;putpixel(ceil(x),ceil(y), RED);

}getch();closegraph();

}

2

Page 5: Cg Lab Manual (New)

3110111040XXXXXXXXX

INPUT:

Enter the Starting Point of x axis : 100Enter the Starting Point of y axis : 100Enter the End Point of x axis : 200Enter the End Point of y axis : 200

OUTPUT:

RESULT:

Thus the program was successfully created and executed.

3

Page 6: Cg Lab Manual (New)

3110111040XXXXXXXXX

EX NO :1B BRESENHAM'S LINE DRAWING METHODDATE:

AIM:

To write a C Program for Line Drawing using Bresenham’s Line drawing Method.

ALGORITHM:

1. Start

2. Read the two end points of a line (x1, y1) & (x2, y2).

3. Determine the Points which is used as start and end then store it in x and y

4. Plot the co-ordinate (x,y)

5. Calculate the constants ∆x, ∆y, 2∆y, 2∆y-2∆x and also obtain the starting value for the

decision parameter as p=2∆y-∆x

6. At each xk along the line, starting at k=0, Perform the following :

a. if pk<0, the next point to plot is (xk+1,yk) and pk+1=pk+2∆y

otherwise

b. the next point to plot is (xk+1,yk+1) and pk+1=pk+2∆y-2∆x

7. Repeat the Step 6 for ∆x times

8. Stop.

PROGRAM:

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

int gd = DETECT, gm;int x,y,x1,y1,x2,y2,p,dx,dy,twody,twodydx,xend;initgraph(&gd,&gm,"..\\BGI:");printf("\nEnter the x-coordinate of the starting point :");scanf("%d",&x1);printf("\nEnter the y-coordinate of the starting point :");scanf("%d",&y1);printf("\nEnter the x-coordinate of the Ending point :");scanf("%d",&x2);printf("\nEnter the y-coordinate of the ending point :");scanf("%d",&y2);

4

Page 7: Cg Lab Manual (New)

3110111040XXXXXXXXX

clrscr();dx=x2-x1;dy=y2-y1;p=2*dy-dx;twody=2*dy;twodydx=2*(dy-dx);if (x1>x2){

x=x2;y=y2;xend=x1;

}else{

x=x1;y=y1;xend=x2;

}putpixel(x,y,RED);while(x<xend){

x++;if (p<0)

p=p+twody;else{

y=y+1;p=p+twodydx;

}putpixel(x,y,RED);

}getch();closegraph();

}

5

Page 8: Cg Lab Manual (New)

3110111040XXXXXXXXX

INPUT:

Enter the x-coordinate of the starting point : 100Enter the y-coordinate of the starting point : 100Enter the x-coordinate of the Ending point : 200Enter the y-coordinate of the ending point : 200

OUTPUT:

RESULT:

Thus the program was successfully created and executed.

6

Page 9: Cg Lab Manual (New)

3110111040XXXXXXXXX

EX NO :2A MIDPOINT ELLIPSE DRAWING ALGORITHMDATE:

AIM:

To write a C Program for Ellipse Drawing using Midpoint Ellipse drawing Method.

ALGORITHM:

Step 1 : Start

Step 2 : Input rx ,ry, and ellipse center (xc, yc,) and obtain the first point on an ellipse

centered on the origin as (x,y)=(0,ry)

Step 3: Calculate the initial value of the decision parameter in region 1

p=ry2-(rx2*ry)+(0.25*rx2);

Step 4: At each position xk position in region1 perform the following

a) if pk<0 then pk+1 = pk+2ry2xk+1+ry2

else

b) pk+1 = pk+2ry2xk+1 – 2rx2yk+1+ry2

c) continue until 2ry2x >=2rx2y.

Step 5: Calculate the initial value of the decision parameter in region 2

p= ry2*(x+0.5)*(x+0.5)+rx2*(y-1)*(y-1)-rx2*ry2

Step 6: At each position yk position in region2 perform the following

a) if pk<0 then pk+1 = pk-2rx2yk+1+rx2

else

b) pk+1 = pk+2ry2xk+1 – 2rx2yk+1+ry2

c) continue until 2rx2y>=2ry2x.

Step 7: Move each calculated pixel position onto the elliptical path and plot the co-ordinates.

Step 8: Stop

PROGRAM:

#include<graphics.h>#include<stdio.h>#include<conio.h>#include<stdlib.h>#define round(a) ((int)(a+0.5))void ellipseplot(int,int,int,int);int xcenter,yc,rx,ry;void main(){

7

Page 10: Cg Lab Manual (New)

3110111040XXXXXXXXX

int gd=DETECT,gm;int xcenter,ycenter,rx,ry;long rx2,ry2,tworx2,twory2,p,x,y,px,py;initgraph(&gd,&gm,"..\\BGI:");printf("\nEnter the x-coordinate of the centre point :");scanf("%d",&xcenter);printf("\nEnter the y-coordinate of the centre point :");scanf("%d",&ycenter);printf("\nEnter the x-coordinate of the radius :");scanf("%d",&rx);printf("\nEnter the y-coordinate of the radius :");scanf("%d",&ry);rx2=rx*rx;ry2=ry*ry;twory2=2*ry2;tworx2=2*rx2;x=0;y=ry;py=tworx2*y;px=0;ellipseplot(xcenter,ycenter,x,y);p=round(ry2-(rx2*ry)+(0.25*rx2));while(px<py){

x++;px=px+twory2;if(p<0)

p=p+ry2+px;else{

y--;py=py-tworx2;p=p+ry2+px-py;

}ellipseplot(xcenter,ycenter,x,y);

}p=round(ry2*(x+0.5)*(x+0.5)+rx2*(y-1)*(y-1)-rx2*ry2);while(y>0){

y--;py=py-tworx2;if(p>0)

p=p+rx2-py;else{

x++;px=px+twory2;p=p+rx2-py+px;

}ellipseplot(xcenter,ycenter,x,y);

8

Page 11: Cg Lab Manual (New)

3110111040XXXXXXXXX

}getch();closegraph();

}void ellipseplot(int xcenter,int ycenter,int x,int y){

putpixel(xcenter +x,ycenter +y,20);putpixel(xcenter -x,ycenter +y,20);putpixel(xcenter +x,ycenter -y,20);putpixel(xcenter -x,ycenter -y,20);

}

INPUT:

Enter the x-coordinate of the centre point : 100Enter the y-coordinate of the centre point : 200Enter the x-coordinate of the radius : 50Enter the y-coordinate of the radius : 60

OUTPUT:

RESULT:

Thus the program was successfully created and executed.

9

Page 12: Cg Lab Manual (New)

3110111040XXXXXXXXX

EX NO :2B MIDPOINT CIRCLE DRAWING ALGORITHMDATE:

AIM:

To write a C Program for Circle Drawing using Midpoint Circle Method.

ALGORITHM:

1. Start2. Get the center point (xcenter, ycenter) and radius(r) of a circle.3. Initialize the variables

i. x=0; y=r; p=1-r;4. If (p<0) then

i. p=p+(2*x)+1 else

i. y--;ii. p=p+2* (x-y)+1

5. Repeat step 4 until x<y and Increment x by 1 each time.6. Plot the pixel to display the circle.7. Display the circle8. Stop.

PROGRAM:

#include<stdio.h>#include<conio.h>#include<graphics.h>#include<math.h>int x,y,r,p,xcenter, ycenter;void circleplot(int,int,int,int);void main(){

int gd = DETECT, gm;initgraph(&gd,&gm,"..\\BGI:");printf("\nEnter the x-coordinate of the centre point :");scanf("%d",&xcenter);printf("\nEnter the y-coordinate of the centre point :");scanf("%d",&ycenter);printf("\nEnter the radius :");scanf("%d",&r);x=0;y=r;p=1-r;while (x<y){

x++;if (p<0)

p=p+2*x+1;

10

Page 13: Cg Lab Manual (New)

3110111040XXXXXXXXX

else{

y--;p=p+2*(x-y)+1;

}circleplot(xcenter,ycenter,x,y);

}getch();closegraph();

}void circleplot(int xcenter, int ycenter,int x, int y){

putpixel(xcenter+x,ycenter+y,10);putpixel(xcenter-x,ycenter+y,10);putpixel(xcenter+x,ycenter-y,10);putpixel(xcenter-x,ycenter-y,10);putpixel(xcenter+y,ycenter+x,10);putpixel(xcenter-y,ycenter+x,10);putpixel(xcenter+y,ycenter-x,10);putpixel(xcenter-y,ycenter-x,10);

}

OUTPUT:Enter the x-coordinate of the centre point :200Enter the y-coordinate of the centre point :200Enter the radius :50

RESULT:

Thus the program was successfully created and executed

11

Page 14: Cg Lab Manual (New)

3110111040XXXXXXXXX

EX NO :3A LINE ATTRIBUTESDATE:

AIM:To study and Implement line attributes

ALGORITHM:

1. Start the program for line type

2. Include the necessary package

3. Declare the line type

4. Using setline style and line function to draw the different line function

5. Terminate the function

PROGRAM:

#include <graphics.h>#include <stdlib.h>#include <string.h>#include <stdio.h>#include <conio.h>void main(){

int gd=DETECT,gm;int ch;clrscr();while(1){

printf("******Line Styles*******\n");printf("\n1.Solid Line");printf("\n2.Dotted Line");printf("\n3.Center Line");printf("\n4.Dashed Line");printf("\n5.Userbit Line");printf("\n6.Exit");printf("\n\nEnter your choice:\n");scanf("%d",&ch);switch(ch){

case 1:clrscr();initgraph(&gd,&gm," ");setlinestyle(0,1,3);line(100,30,250,250);getch();cleardevice();closegraph();break;

12

Page 15: Cg Lab Manual (New)

3110111040XXXXXXXXX

case 2:clrscr();initgraph(&gd,&gm," ");clrscr();setlinestyle(1,1,3);line(100,30,250,250);getch();cleardevice();closegraph();break;

case 3:clrscr();initgraph(&gd,&gm," ");setlinestyle(2,1,3);line(100,30,250,250);getch();cleardevice();closegraph();break;

case 4:clrscr();initgraph(&gd,&gm," ");setlinestyle(3,1,3);line(100,30,250,250);getch();cleardevice();closegraph();break;

case 5:clrscr();initgraph(&gd,&gm," ");setlinestyle(4,1,3);line(100,30,250,250);getch();cleardevice();closegraph();break;

case 6:exit(0);

}}

}

13

Page 16: Cg Lab Manual (New)

3110111040XXXXXXXXX

OUTPUT:

******Line Styles*******1.Solid Line2.Dotted Line3.Center Line4.Dashed Line5.Userbit Line6.Exit

Enter your choice:4

RESULT:

Thus the program was successfully created and executed.

14

Page 17: Cg Lab Manual (New)

3110111040XXXXXXXXX

EX NO :3B CIRCLE ATTRIBUTESDATE:

AIM:To study and Implement Circle attributes

ALGORITHM:

1.Initialize the graphics mode2.For circle,set the fill pattern using setfillstyle() command.3.Draw the circle using pieslice() command.4.Perform the clean up procedure.

PROGRAM:

#include <graphics.h>#include <stdlib.h>#include <string.h>#include <stdio.h>#include <conio.h>void main(){

int gd=DETECT,gm;int ch;clrscr();while(1){

printf("******Circle Attributes*******\n");printf("\n1.Empty Fill");printf("\n2.Soild Fill");printf("\n3.Line Fill");printf("\n4.LTSlash Fill");printf("\n5.Slash Fill");printf("\n6.BKSlash Fill");printf("\n7.LTBKSlash Fill");printf("\n8.Hatch Fill");printf("\n9.Xhatch Fill");printf("\n10.Interleave Fill");printf("\n11.Wide dot Fill");printf("\n12.close dot Fill");printf("\n13.User Fill");printf("\n14.Exit");printf("\n\nEnter your choice:\n");scanf("%d",&ch);

switch(ch){

15

Page 18: Cg Lab Manual (New)

3110111040XXXXXXXXX

case 1:clrscr();initgraph(&gd,&gm," ");setfillstyle(EMPTY_FILL, RED);circle(100, 100, 50);floodfill(100, 100, WHITE);getch();cleardevice();closegraph();break;

case 2:clrscr();initgraph(&gd,&gm," ");setfillstyle(SOLID_FILL, RED);circle(100, 100, 50);floodfill(100, 100, WHITE);getch();cleardevice();closegraph();break;

case 3:clrscr();initgraph(&gd,&gm," ");setfillstyle(LINE_FILL, RED);circle(100, 100, 50);floodfill(100, 100, WHITE);getch();cleardevice();closegraph();break;

case 4:clrscr();initgraph(&gd,&gm," ");setfillstyle(LTSLASH_FILL, RED);circle(100, 100, 50);floodfill(100, 100, WHITE);getch();cleardevice();closegraph();break;

case 5:clrscr();initgraph(&gd,&gm," ");setfillstyle(SLASH_FILL, RED);circle(100, 100, 50);floodfill(100, 100, WHITE);getch();cleardevice();closegraph();break;

16

Page 19: Cg Lab Manual (New)

3110111040XXXXXXXXX

case 6:clrscr();initgraph(&gd,&gm," ");setfillstyle(BKSLASH_FILL, RED);circle(100, 100, 50);floodfill(100, 100, WHITE);getch();cleardevice();closegraph();break;

case 7:clrscr();initgraph(&gd,&gm," ");setfillstyle(LTBKSLASH_FILL, RED);circle(100, 100, 50);floodfill(100, 100, WHITE);getch();cleardevice();closegraph();break;

case 8:clrscr();initgraph(&gd,&gm," ");setfillstyle(HATCH_FILL, RED);circle(100, 100, 50);floodfill(100, 100, WHITE);getch();cleardevice();closegraph();break;

case 9:clrscr();initgraph(&gd,&gm," ");setfillstyle(XHATCH_FILL, RED);circle(100, 100, 50);floodfill(100, 100, WHITE);getch();cleardevice();closegraph();break;

case 10:clrscr();initgraph(&gd,&gm," ");setfillstyle(INTERLEAVE_FILL, RED);circle(100, 100, 50);floodfill(100, 100, WHITE);getch();cleardevice();closegraph();break;

case 11:

17

Page 20: Cg Lab Manual (New)

3110111040XXXXXXXXX

clrscr();initgraph(&gd,&gm," ");setfillstyle(WIDE_DOT_FILL, RED);circle(100, 100, 50);floodfill(100, 100, WHITE);getch();cleardevice();closegraph();break;

case 12:clrscr();initgraph(&gd,&gm," ");setfillstyle(CLOSE_DOT_FILL, RED);circle(100, 100, 50);floodfill(100, 100, WHITE);getch();cleardevice();closegraph();break;

case 13:clrscr();initgraph(&gd,&gm," ");setfillstyle(USER_FILL, RED);circle(100, 100, 50);floodfill(100, 100, WHITE);getch();cleardevice();closegraph();break;

case 14:exit(0);

}}

}

18

Page 21: Cg Lab Manual (New)

3110111040XXXXXXXXX

Output

******Circle Attributes*******

1.Empty Fill2.Soild Fill3.Line Fill4.LTSlash Fill5.Slash Fill6.BKSlash Fill7.LTBKSlash Fill8.Hatch Fill9.Xhatch Fill10.Interleave Fill11.Wide dot Fill12.close dot Fill13.User Fill14.Exit

Enter your choice : 5

RESULT:

Thus the program was successfully created and executed.

19

Page 22: Cg Lab Manual (New)

3110111040XXXXXXXXX

EX NO :3C ELLIPSE ATTRIBUTESDATE:

AIM:To study and Implement ellipse attributes

ALGORITHM:

1.Initialize the graphics mode2.For ellipse,set the fill pattern using setfillstyle() command.3.Draw the ellipse using pieslice() command.4.Perform the clean up procedure.

PROGRAM:

#include <graphics.h>#include <stdlib.h>#include <string.h>#include <stdio.h>#include <conio.h>void main(){

int gd=DETECT,gm;int ch;clrscr();while(1){

printf("******Ellipse Attributes*******\n");printf("\n1.Empty Fill");printf("\n2.Soild Fill");printf("\n3.Line Fill");printf("\n4.LTSlash Fill");printf("\n5.Slash Fill");printf("\n6.BKSlash Fill");printf("\n7.LTBKSlash Fill");printf("\n8.Hatch Fill");printf("\n9.Xhatch Fill");printf("\n10.Interleave Fill");printf("\n11.Wide dot Fill");printf("\n12.close dot Fill");printf("\n13.User Fill");printf("\n14.Exit");printf("\n\nEnter your choice:\n");scanf("%d",&ch);

switch(ch){

case 1:clrscr();

20

Page 23: Cg Lab Manual (New)

3110111040XXXXXXXXX

initgraph(&gd,&gm," ");setfillstyle(EMPTY_FILL, RED);ellipse(100, 100,0,360,50,25);floodfill(100, 100, WHITE);getch();cleardevice();closegraph();break;

case 2:clrscr();initgraph(&gd,&gm," ");setfillstyle(SOLID_FILL, RED);ellipse(100, 100,0,360,50,25);floodfill(100, 100, WHITE);getch();cleardevice();closegraph();break;

case 3:clrscr();initgraph(&gd,&gm," ");setfillstyle(LINE_FILL, RED);ellipse(100, 100,0,360,50,25);floodfill(100, 100, WHITE);getch();cleardevice();closegraph();break;

case 4:clrscr();initgraph(&gd,&gm," ");setfillstyle(LTSLASH_FILL, RED);ellipse(100, 100,0,360,50,25);floodfill(100, 100, WHITE);getch();cleardevice();closegraph();break;

case 5:clrscr();initgraph(&gd,&gm," ");setfillstyle(SLASH_FILL, RED);ellipse(100, 100,0,360,50,25);floodfill(100, 100, WHITE);getch();cleardevice();closegraph();break;

case 6:clrscr();

21

Page 24: Cg Lab Manual (New)

3110111040XXXXXXXXX

initgraph(&gd,&gm," ");setfillstyle(BKSLASH_FILL, RED);ellipse(100, 100,0,360,50,25);floodfill(100, 100, WHITE);getch();cleardevice();closegraph();break;

case 7:clrscr();initgraph(&gd,&gm," ");setfillstyle(LTBKSLASH_FILL, RED);ellipse(100, 100,0,360,50,25);floodfill(100, 100, WHITE);getch();cleardevice();closegraph();break;

case 8:clrscr();initgraph(&gd,&gm," ");setfillstyle(HATCH_FILL, RED);ellipse(100, 100,0,360,50,25);floodfill(100, 100, WHITE);getch();cleardevice();closegraph();break;

case 9:clrscr();initgraph(&gd,&gm," ");setfillstyle(XHATCH_FILL, RED);ellipse(100, 100,0,360,50,25);floodfill(100, 100, WHITE);getch();cleardevice();closegraph();break;

case 10:clrscr();initgraph(&gd,&gm," ");setfillstyle(INTERLEAVE_FILL, RED);ellipse(100, 100,0,360,50,25);floodfill(100, 100, WHITE);getch();cleardevice();closegraph();break;

case 11:clrscr();

22

Page 25: Cg Lab Manual (New)

3110111040XXXXXXXXX

initgraph(&gd,&gm," ");setfillstyle(WIDE_DOT_FILL, RED);ellipse(100, 100,0,360,50,25);floodfill(100, 100, WHITE);getch();cleardevice();closegraph();break;

case 12:clrscr();initgraph(&gd,&gm," ");setfillstyle(CLOSE_DOT_FILL, RED);ellipse(100, 100,0,360,50,25);floodfill(100, 100, WHITE);getch();cleardevice();closegraph();break;

case 13:clrscr();initgraph(&gd,&gm," ");setfillstyle(USER_FILL, RED);ellipse(100, 100,0,360,50,25);floodfill(100, 100, WHITE);getch();cleardevice();closegraph();break;

case 14:exit(0);

}}

}

23

Page 26: Cg Lab Manual (New)

3110111040XXXXXXXXX

OUTPUT:

******Ellipse Attributes*******1.Empty Fill2.Soild Fill3.Line Fill4.LTSlash Fill5.Slash Fill6.BKSlash Fill7.LTBKSlash Fill8.Hatch Fill9.Xhatch Fill10.Interleave Fill11.Wide dot Fill12.close dot Fill13.User Fill14.ExitEnter your choice : 9

RESULT:

Thus the program was successfully created and executed .

24

Page 27: Cg Lab Manual (New)

3110111040XXXXXXXXX

EX NO :4 2D TRANSFORMATIONS-TRANSLATION,SCALING,ROTATION,SHEAR

DATE : AND SHEAR

AIM:To study and Implement 2D Transformation– Translation, Rotation, Scaling, Shear

and Reflection

ALGORITHM:

Step 1: Declare the variables xa,ya,xa1,ya1 of array type.

Step 2:Declare the variables gd,gm,n,i,op,tx,ty,xf,yf,rx,ry.

Step 3: Initialize the graphics function.

Step 4: Input the number of points.

Step 5: Input the value of co-ordinate according to number of points.

Step 6 : Using switch statement selects the option to perform translation, rotation, scaling,

reflection and shearing.

Step 7: Translation:

a).input the translation vector

b).add the translation vectors with the coordinates

xa1 [i] =xa[i] =tx, ya1[i] =ya[i] =ty,

c).using the function line, display the object before and after translation.

Step 8: Rotation

a). input the rotation angle

b). using formula theta=(theta*3.14)/180

c).input the value of reference point

d). calculate new coordinate point using formula

xa1[i]=xf+(xa[i]-xf)*cos(theta)-(ya[i]-yf)*sin(theta),

ya1[i]=yf+(xa[i]-xf)*sin(theta)-(ya[i]-yf)*cos(theta),

e). using the function line,display the object before and after rotation.

Step 9: Scaling:

a).input the scaling factor and reference point

b).calculate new coordinate point using formula

xa1[i]=(xa[i]*sx+rx*(1-sx),

ya1 [i] = (ya[i]*sy+ry*(1-sy)

c). using the function line, display the object before and after scaling.

25

Page 28: Cg Lab Manual (New)

3110111040XXXXXXXXX

Step 10: Shearing:

a).input the shearing value and reference point.

b). input the shear direction x or y

i).if direction x

xa1[i]=xa[i]+shx*(ya[i]-yref)

ii).otherwise

ya1[i]=ya[i]+shy*(xa[i]-xref)

iii). using the function line, display the object before and after shearing.

Step 11: Reflection:

a).display the object before reflection using the function line

b). display the object after reflection using the function line

Step 12: Stop.

PROGRAM:

a) Translation

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

void RectAngle(int x,int y,int Height,int Width);

void main(){ int gd=DETECT,gm; int x,y,Height,Width,a,b,Newx,Newy; initgraph(&gd,&gm," "); printf("Enter the First point for the Rectangle:"); scanf("%d%d",&x,&y); printf("Enter the Height & Width for the Rectangle:"); scanf("%d%d",&Height,&Width);

printf("Enter the Translation coordinates"); scanf("%d%d",&Newx,&Newy); cleardevice(); printf("\nBefore Translation"); RectAngle(x,y,Height,Width); a=x+Newx; b=y+Newy; printf("\n\nAfter Translation"); RectAngle(a,b,Height,Width); getch();

26

Page 29: Cg Lab Manual (New)

3110111040XXXXXXXXX

}

void RectAngle(int x,int y,int Height,int Width){

line(x,y,x+Width,y); line(x,y,x,y+Height); line(x+Width,y,x+Width,y+Height); line(x,y+Height,x+Width,y+Height);}

b) Scaling

#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 scaling factors"); scanf("%d%d",&x,&y); mx=(x1+x2+x3)/3; my=(y1+y2+y3)/3;

27

Page 30: Cg Lab Manual (New)

3110111040XXXXXXXXX

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

c) Rotation

#include<stdio.h>#include<conio.h>#include<graphics.h>#include<process.h>#include<math.h>void TriAngle(int x1,int y1,int x2,int y2,int x3,int y3);void Rotate(int x1,int y1,int x2,int y2,int x3,int y3);void main(){

int gd=DETECT,gm;int x1,y1,x2,y2,x3,y3; 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);TriAngle(x1,y1,x2,y2,x3,y3);getch();cleardevice();Rotate(x1,y1,x2,y2,x3,y3);setcolor(1);TriAngle(x1,y1,x2,y2,x3,y3);getch();

}void TriAngle(int x1,int y1,int x2,int y2,int x3,int y3){

line(x1,y1,x2,y2);line(x2,y2,x3,y3);line(x3,y3,x1,y1);

}void Rotate(int x1,int y1,int x2,int y2,int x3,int y3){

28

Page 31: Cg Lab Manual (New)

3110111040XXXXXXXXX

int x,y,a1,b1,a2,b2,a3,b3,p=x2,q=y2;float Angle;printf("Enter the angle for rotation:");scanf("%f",&Angle);cleardevice();Angle=(Angle*3.14)/180;a1=p+(x1-p)*cos(Angle)-(y1-q)*sin(Angle);b1=q+(x1-p)*sin(Angle)+(y1-q)*cos(Angle);a2=p+(x2-p)*cos(Angle)-(y2-q)*sin(Angle);b2=q+(x2-p)*sin(Angle)+(y2-q)*cos(Angle);a3=p+(x3-p)*cos(Angle)-(y3-q)*sin(Angle);b3=q+(x3-p)*sin(Angle)+(y3-q)*cos(Angle);printf("Rotate");TriAngle(a1,b1,a2,b2,a3,b3);

}

d) Shearing

#include<stdio.h>#include<process.h>#include<conio.h>#include<graphics.h>#include<math.h>void disp(int n,float c[][3]){

float maxx,maxy;int i;maxx=getmaxx();maxy=getmaxy();maxx=maxx/2;maxy=maxy/2;i=0;while(i<n-1){

line(maxx+c[i][0],maxy-c[i][1],maxx+c[i+1][0],maxy-c[i+1][1]);i++;

}i=n-1;line(maxx+c[i][0],maxy-c[i][1],maxx+c[0][0],maxy-c[0][1]);setcolor(GREEN);line(0,maxy,maxx*2,maxy);line(maxx,0,maxx,maxy*2);setcolor(WHITE);

}void mul(int n,float b[][3],float c[][3],float a[][3]){

int i,j,k;for(i=0;i<n;i++)

for(j=0;j<3;j++)a[i][j]=0;

29

Page 32: Cg Lab Manual (New)

3110111040XXXXXXXXX

for(i=0;i<n;i++)for(j=0;j<3;j++)

for(k=0;k<3;k++){

a[i][j] = a[i][j] + (c[i][k] * b[k][j]);}

}void shearing(int n,float c[][3]){

float b[10][3],sh,a[10][3];int i=0,ch,j;while(1){

clrscr();cleardevice();printf("\n* * * MENU * * *");printf("\n 1) X SHEARING");printf("\n 2) Y SHEARING");printf("\n 3) EXIT ");printf("\n ENTER YOUR CHOICE :   ");scanf("%d",&ch);for(i=0;i<3;i++)

for(j=0;j<3;j++)b[i][j]=0;

for(i=0;i<3;i++)b[i][i]=1;

switch(ch){

case 1:printf("\n ENTER THE VALUE for SHEARING:        ");scanf("%f",&sh);b[1][0]=sh;break;

case 2:printf("\n ENTER THE VALUE for SHEARING:        ");scanf("%f",&sh);b[0][1]=sh;break;

case 3:exit(0);break;

default:printf("\nINVALID CHOICE ! ");break;

}disp(n,c);mul(n,b,c,a);setcolor(RED);disp(n,a);getch();

30

Page 33: Cg Lab Manual (New)

3110111040XXXXXXXXX

}}void main(){

int i,j,k,cho,n,gd=DETECT,gm;float c[10][3],tx,ty,sx,sy,ra;initgraph(&gd,&gm," ");printf("\n Enter the number of vertices :   ");scanf("%d",&n);for(i=0;i<n;i++){

printf("\nEnter the co-ordinates of the %d vertex :",i+1);scanf("%f%f",&c[i][0],&c[i][1]);c[i][2]=1;

}shearing(n,c);closegraph();

}

e) Reflection

#include<stdio.h>#include<conio.h>#include<graphics.h>#include<math.h>void disp(int n,float c[][3]){

float maxx,maxy;int i;maxx=getmaxx();maxy=getmaxy();maxx=maxx/2;maxy=maxy/2;i=0;while(i<n-1){

line(maxx+c[i][0],maxy-c[i][1],maxx+c[i+1][0],maxy-c[i+1][1]);i++;

}i=n-1;line(maxx+c[i][0],maxy-c[i][1],maxx+c[0][0],maxy-c[0][1]);setcolor(GREEN);line(0,maxy,maxx*2,maxy);line(maxx,0,maxx,maxy*2);setcolor(WHITE);

}void mul(int n,float b[][3],float c[][3],float a[][3]){

int i,j,k;for(i=0;i<n;i++)

31

Page 34: Cg Lab Manual (New)

3110111040XXXXXXXXX

for(j=0;j<3;j++)a[i][j]=0;

for(i=0;i<n;i++)for(j=0;j<3;j++)

for(k=0;k<3;k++){

a[i][j] = a[i][j] + (c[i][k] * b[k][j]);}

}void reflection(int n,float c[][3]){

float b[10][3],a[10][3];int i=0,ch,j;while(1){

clrscr();cleardevice();printf("\n* * MENU * *");printf("\n 1) ABOUT X-AXIS");printf("\n 2) ABOUT Y-AXIS");printf("\n 3) ABOUT ORIGIN");printf("\n 4) ABOUT X=Y");printf("\n 5) ABOUT -X=Y");printf("\n 6) EXIT");printf("\n ENTER YOUR CHOICE :   ");scanf("%d",&ch);for(i=0;i<3;i++)

for(j=0;j<3;j++){

b[i][j]=0;if(i==j)

b[i][j]=1;}

switch(ch){

case 1:b[1][1]=-1;break;

case 2:b[0][0]=-1;break;

case 3:b[0][0]=-1;b[1][1]=-1;break;

case 4:b[0][0]=0;b[1][1]=0;b[0][1]=1;b[1][0]=1;

32

Page 35: Cg Lab Manual (New)

3110111040XXXXXXXXX

break;case 5:

b[0][0]=0;b[1][1]=0;b[0][1]=-1;b[1][0]=-1;break;

case 6:exit(0);break;

default:printf("\nINVALID CHOICE ! ");break;

}mul(n,b,c,a);clrscr();cleardevice();disp(n,c);setcolor(RED);disp(n,a);

getch();}

}void main(){

int i,j,k,cho,n,gd=DETECT,gm;float c[10][3],tx,ty,sx,sy,ra;initgraph(&gd,&gm," ");printf("\n Enter the number of vertices :   ");scanf("%d",&n);for(i=0;i<n;i++){

printf("\nEnter the co-ordinates of the %d vertex :",i+1);scanf("%f%f",&c[i][0],&c[i][1]);c[i][2]=1;

}reflection(n,c);closegraph();

}

OUTPUT:a) Translation

Enter the first point of the rectangle : 100 100Enter the height and width of the rectangle : 50 100Enter the translation coordinates : 200 200

33

Page 36: Cg Lab Manual (New)

3110111040XXXXXXXXX

b) ScalingEnter the 1st point for the triangle : 150 150Enter the 2nd point for the triangle : 200 200Enter the 3rd point for the triangle : 200 150Enter the scaling factors : 3 5

c) RotationEnter the 1st point for the triangle: 150 150Enter the 2nd point for the triangle: 200 200Enter the 3rd point for the triangle: 200 150

34

Page 37: Cg Lab Manual (New)

3110111040XXXXXXXXX

Enter the angle for rotation: 60

d) ShearingEnter the number of vertices : 4Enter the coordinates of the 1 vertex: 150 150Enter the coordinates of the 2 vertex: 100 150Enter the coordinates of the 3 vertex: 100 100Enter the coordinates of the 4 vertex: 150 100

35

Page 38: Cg Lab Manual (New)

3110111040XXXXXXXXX

e) ReflectionEnter the number of vertices : 3Enter the coordinates of 1 vertex : 150 150Enter the coordinates of 2 vertex : 100 150Enter the coordinates of 3 vertex : 150 100**MENU**1.ABOUT X-AXIS2.ABOUT Y-AXIS3.ABOUT ORIGIN4.ABOUT X=Y5.ABOUT -X=Y6.EXITEnter your choice : 3

RESULT:

Thus the program was successfully created and executed.

36

Page 39: Cg Lab Manual (New)

3110111040XXXXXXXXX

EX NO :5 COMPOSITE 2D TRANSFORMATIONS

DATE :

AIM: To study and implement composite 2D transformation

ALGORITHM:

Step 1: Initialise the matrix to perform computationsStep 2: Get the values and store it in the matrixStep 3: Perform rotation , scaling and transform the 2D image using matrixStep 4: Display the input and output shape of the object PROGRAM:

#include<stdio.h>#include<conio.h>#include<math.h>#include<graphics.h>struct point{

int x;int y;

};typedef float matrix[3][3];matrix tm;void Identity( matrix m){

int i,j;for(i=0;i<3;i++)for(j=0;j<3;j++)m[i][j]=(i==j);

}void multiply(matrix a, matrix b){

int r,c;matrix tmp;for(r=0;r<3;r++)

for(c=0;c<3;c++)tmp[r][c]=a[r][0]*b[0][c]+a[r][1]*b[1][c]+a[r][2]*b[2][c];

for(r=0;r<3;r++)for(c=0;c<3;c++)

b[r][c]=tmp[r][c];}

void translate(int tx,int ty){

matrix m;Identity(m);m[0][2]=tx;m[1][2]=ty;

37

Page 40: Cg Lab Manual (New)

3110111040XXXXXXXXX

multiply(m,tm);}

void scale(float sx,float sy, struct point refpt){

matrix m;Identity(m);m[0][0]=sx;m[0][2]=(1-sx)*refpt.x;m[1][1]=sy;m[1][2]=(1-sy)*refpt.y;multiply(m,tm);

}void rotate(float a , struct point refpt){

matrix m;Identity(m);a=(a*3.14)/180.0;m[0][0]=cos(a);m[0][1]=-sin(a);m[0][2]=refpt.x*(1-cos(a))+refpt.y*sin(a);m[1][0]=sin(a);m[1][1]=-cos(a);m[1][2]=refpt.y*(1-cos(a))+refpt.x*sin(a);multiply(m,tm);

}void transform(int npts, struct point *pts){

int k;float tmp;for(k=0;k<npts;k++){

tmp=tm[0][0]*pts[k].x+tm[0][1]*pts[k].y+tm[0][2];pts[k].y=tm[1][0]*pts[k].x+tm[1][1]*pts[k].y+tm[1][2];pts[k].x=tmp;

}}void main(){

struct point pts[4]={220.0, 50.0, 320.0, 200.0, 150.0, 200.0, 220.0, 50.0};struct point refpt={50.0,50.0};int g=DETECT,d;initgraph(&g,&d,"c:\tc\bgi");setbkcolor(GREEN);setcolor(RED);drawpoly(4,pts);getch();Identity(tm);scale(0.5,0.5,refpt);rotate(90.0,refpt);

38

Page 41: Cg Lab Manual (New)

3110111040XXXXXXXXX

translate(100,100);transform(4,pts);setcolor(WHITE);drawpoly(4,pts);getch();closegraph();

}

OUTPUT:

RESULT:

Thus the program was successfully created and executed

39

Page 42: Cg Lab Manual (New)

3110111040XXXXXXXXX

EX NO :6 3D TRANSFORMATIONS-TRANSLATION,ROTATION AND SCALING

DATE :

AIM:

To perform 3D transformations such as Translation, Rotation and Scaling on 3D object

ALGORITHM:

1. 3 dimensional transformation it has three axis x,y,z.

2. Depending upon the coordinate it will perform the Translation, Rotation, Scaling,

3. The translation can be performed by changing the sign of the translation components Tx, Ty, and Tz.

4. Perform the scaling of 3D object with scaling parameter

5. Increase of rotation, object can be rotated about x or y or z axis.

6. Display the transmitted object in the screen

PROGRAM:

#include<stdio.h>#include<conio.h>#include<graphics.h>#include<math.h>int maxx,maxy,midx,midy;void axis(){  getch();  cleardevice();  line(midx,0,midx,maxy);  line(0,midy,maxx,midy);}void main(){  int gd,gm,x,y,z,ang,x1,x2,y1,y2;  detectgraph(&gd,&gm);  initgraph(&gd,&gm,"C:/TC/BGI");  setfillstyle(3,25);  maxx=getmaxx();  maxy=getmaxy();  midx=maxx/2;  midy=maxy/2;  outtextxy(100,100,"ORIGINAL OBJECT");

40

Page 43: Cg Lab Manual (New)

3110111040XXXXXXXXX

  line(midx,0,midx,maxy);  line(0,midy,maxx,midy);  bar3d(midx+100,midy-20,midx+60,midy-90,20,5);  axis();  outtextxy(100,20,"TRANSLATION");  printf("\n\n Enter the Translation vector: ");  scanf("%d%d",&x,&y);  bar3d(midx+100,midy-20,midx+60,midy-90,20,5);  bar3d(midx+(x+100),midy-(y+20),midx+(x+60),midy-(y+90),20,5);  axis();  outtextxy(100,20,"SCALING");  printf("\n Enter the Scaling Factor: ");  scanf("%d%d%d",&x,&y,&z);  bar3d(midx+100,midy-20,midx+60,midy-90,20,5);  bar3d(midx+(x*100),midy-(y*20),midx+(x*60),midy-(y*90),20*z,5);  axis();  outtextxy(100,20,"ROTATION");  printf("\n Enter the Rotation angle: ");  scanf("%d",&ang);  x1=100*cos(ang*3.14/180)-20*sin(ang*3.14/180);  y1=100*sin(ang*3.14/180)+20*sin(ang*3.14/180);  x2=60*cos(ang*3.14/180)-90*sin(ang*3.14/180);  y2=60*sin(ang*3.14/180)+90*sin(ang*3.14/180);  axis();  printf("\n After rotating about z-axis\n");  bar3d(midx+100,midy-20,midx+60,midy-90,20,5);  bar3d(midx+x1,midy-y1,midx+x2,midy-y2,20,5);  axis();  printf("\n After rotating about x-axis\n");  bar3d(midx+100,midy-20,midx+60,midy-90,20,5);  bar3d(midx+100,midy-x1,midx+60,midy-x2,20,5);  axis();  printf("\n After rotating about y-axis\n");  bar3d(midx+100,midy-20,midx+60,midy-90,20,5);  bar3d(midx+x1,midy-20,midx+x2,midy-90,20,5);  axis();  closegraph();}

INPUT:

41

Page 44: Cg Lab Manual (New)

3110111040XXXXXXXXX

Enter the translation vector : 65 70Enter the scaling factor : 2 2 2Enter the Rotation Angle : 100

Output

42

Page 45: Cg Lab Manual (New)

3110111040XXXXXXXXX

43

Page 46: Cg Lab Manual (New)

3110111040XXXXXXXXX

RESULT:

Thus the program was successfully created and executed

EX NO :7 COMPOSITE 3D TRANSFORMATIONSDATE :

AIM:

To write a C program to perform composite (sequence) of transformations on a 3D

object.

DESCRPTION:

1) Reflection:

Reflection is a transformation that produces a mirror image of an object.

Transformation matrix for reflection about the line y=0, is

44

Page 47: Cg Lab Manual (New)

3110111040XXXXXXXXX

Transformation matrix for reflection about the line x=0, is

2) Shearing

Shearing is a transformation that distorts the shape of an object.

An X-direction shear relative to the x axis is produced by the transformation matrix

A y-direction shear relative to other referencelines is produced by the transformation

matrix

3) Rotation

This is done by three transformation steps: translation of the arbitrary point (xc,yc) to

the origin, rotate about the origin, and then translate the center of rotation back to where it

belongs.

To tranform a point, we would multiply all the transformation matrices together to

form an overall transformation matrix.

1. The translation which moves (xc,yc) to the origin:

2. the rotation is

45

Page 48: Cg Lab Manual (New)

3110111040XXXXXXXXX

=

3. and the translation to move the center point back is

ALGORITHM:1. Start the program.2. Declare the variables.3. Declare the following functions.

transform()rotate()scale()

4. Translate the object one co-ordinate to another using transform() function and rotate the object using rotate function.5. Translate the object one co-ordinate to another using transform() function and change the size of object using scale() function.6. Change the size of object using scale() function and translate the object one co-ordinate to another using transform() function7. Display the object.8. Stop the program.

PROGARM:#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<math.h>#include<graphics.h>float tx,ty,tz,sx,sy,sz,r;float x[15][15],y[15][15],z[15][15];int i,j=2,ch;void transform(){

x[i][j-1]=x[i][j-1]+tx;x[i][j]=x[i][j]+tx;y[i][j-1]=y[i][j-1]+ty;y[i][j]=y[i][j]+ty;z[i][j-1]=z[i][j-1]+tz;z[i][j]=z[i][j]+tz;

}void rotate(){

if(i<=8){

x[i][j-1]=(x[i][j-1]*cos(r))-(y[i][j-1]*sin(r));y[i][j-1]=(x[i][j-1]*sin(r))+(y[i][j-1]*cos(r));

46

Page 49: Cg Lab Manual (New)

3110111040XXXXXXXXX

x[i][j]=(x[i][j]*cos(r))-(y[i][j]*sin(r));y[i][j]=(x[i][j]*sin(r))+(y[i][j]*cos(r));

}else{

z[i][j-1]=(z[i][j-1]*cos(r))-(y[i][j-1]*sin(r));y[i][j-1]=(z[i][j-1]*sin(r))+(y[i][j-1]*cos(r));z[i][j]=(z[i][j]*cos(r))-(y[i][j]*sin(r));y[i][j]=(z[i][j]*sin(r))+(y[i][j]*cos(r));

}}void scale(){

x[i][j-1]=x[i][j-1]*sx;x[i][j]=x[i][j]*sx;y[i][j-1]=y[i][j-1]*sy;y[i][j]=y[i][j]*sy;z[i][j-1]=z[i][j-1]*sz;z[i][j]=z[i][j]*sz;

}int main(){

int gd=DETECT,gm;initgraph(&gd,&gm,"c:\\tc\\bgi");x[1][1]=200,x[1][2]=250,y[1][1]=200,y[1][2]=200;x[2][1]=200,x[2][2]=200,y[2][1]=200,y[2][2]=150;x[3][1]=200,x[3][2]=250,y[3][1]=150,y[3][2]=150;x[4][1]=250,x[4][2]=250,y[4][1]=150,y[4][2]=200;x[5][1]=220,x[5][2]=270,y[5][1]=140,y[5][2]=140;x[6][1]=270,x[6][2]=270,y[6][1]=140,y[6][2]=190;x[7][1]=220,x[7][2]=220,y[7][1]=140,y[7][2]=190;x[8][1]=220,x[8][2]=270,y[8][1]=190,y[8][2]=190;z[9][1]=200,z[9][2]=220,y[9][1]=150,y[9][2]=140;z[10][1]=250,z[10][2]=270,y[10][1]=150,y[10][2]=140;z[11][1]=250,z[11][2]=270,y[11][1]=200,y[11][2]=190;z[12][1]=220,z[12][2]=200,y[12][1]=190,y[12][2]=200;textattr(0);for(i=1;i<=12;i++){

if(i<=8)line(x[i][j-1],y[i][j-1],x[i][j],y[i][j]);

elseline(z[i][j-1],y[i][j-1],z[i][j],y[i][j]);

}while(ch!=4){

printf("\n 3D-COMPOSITE TRANSFORMATION");printf("\n1.TRANSLATION & ROTATION");printf("\n2.TRANSLATION & SCALING");printf("\n3.SCALING & ROTATION");

47

Page 50: Cg Lab Manual (New)

3110111040XXXXXXXXX

printf("\n4.EXIT");printf("\nENTER YOUR CHOICE:");scanf("%d",&ch);switch(ch){

case 1:printf("\nENTER X Y & Z VALUES:");scanf("%f%f%f",&tx,&ty,&tz);printf("\nENTER ROTATION ANGLE:");scanf("%f",&r);clrscr();r=(r*3.14/180);for(i=1;i<=12;i++){

transform();rotate();if(i<=8)

line(x[i][j-1],y[i][j-1],x[i][j],y[i][j]);else

line(z[i][j-1],y[i][j-1],z[i][j],y[i][j]);delay(500);

}break;

case 2:printf("\nENTER X Y & Z VALUES:");scanf("%f%f%f",&tx,&ty,&tz);printf("\nENTER X Y & Z VECTORS:");scanf("%f%f%f",&sx,&sy,&sz);clrscr();for(i=1;i<=12;i++){

transform();scale();if(i<=8)

line(x[i][j-1],y[i][j-1],x[i][j],y[i][j]);else

line(z[i][j-1],y[i][j-1],z[i][j],y[i][j]);delay(500);

}break;

case 3:printf("\nENTER X Y & Z VECTORS:");scanf("%f%f%f",&sx,&sy,&sz);printf("\nENTER ROTATION ANGLE:");scanf("%f",&r);clrscr();r=(r*3.14/180);for(i=1;i<=12;i++){

scale();

48

Page 51: Cg Lab Manual (New)

3110111040XXXXXXXXX

rotate();if(i<=8)

line(x[i][j-1],y[i][j-1],x[i][j],y[i][j]);else

line(z[i][j-1],y[i][j-1],z[i][j],y[i][j]);delay(500);

}break;

case 4:printf("\nEND OF PROGRAM");exit(0);break;

}}getch();return 0;

}

OUTPUT:/* 3D-COMPOSITE TRANSFORMATION */1. TRANSLATION & ROTATION2.TRANSLATION & SCALING3.SCALING & ROTATION4.EXITENTER YOUR CHOICE:ENTER YOUR CHOICE:1ENTER YOUR X,Y &Z VECTORS: 1 1 1ENTER ROTATION ANGLE : 201. TRANSLATION & ROTATION2.TRANSLATION & SCALING3.SCALING & ROTATION4.EXITENTER YOUR CHOICE:2ENTER YOUR X ,Y & Z VALUES: 2 2 2ENTER YOUR X ,Y & Z VECTORS : 3 21. TRANSLATION & ROTATION2.TRANSLATION & SCALING3.SCALING & ROTATION4.EXITENTER YOUR CHOICE:3ENTER YOUR X,Y & Z VECTORS :1.3 1.4 1.3ENTER ROTATION ANGLE : 25

49

Page 52: Cg Lab Manual (New)

3110111040XXXXXXXXX

1. TRANSLATION & ROTATION2.TRANSLATION & SCALING3.SCALING & ROTATION4.EXITENTER YOUR CHOICE:4END OF THE PROGRAM

RESULT:Thus the program has been executed and verified successfully.

EX NO :8 COHEN SUTHERLAND 2D LINE CLIPPING AND WINDOWING DATE :

AIM:

To study and Implement Cohen Sutherland 2D line clipping and Windowing

ALGORITHM:

1. Start

2. Input two endpoints of the line say p1 ( x 1 , y1 ) and p2 ( x 2 , y 2 )

3. Input two corners (Let-top and right -bottom ) of the window , say(wx1 ,wy1 and wx2

, wy2)

4. Assign the region codes for two endpoints p1 and p2 using following steps :

Initialize code with bits 0000

Set Bit1 =0 if (x < wx1 )

Set Bit2 =0 if (x < wx2 )

50

Page 53: Cg Lab Manual (New)

3110111040XXXXXXXXX

Set Bit3 =0 if (y < wy2 )

Set Bit4 =0 if (y < wy1 )

5. Check for visibility of line

a. If region codes for both endpoints p1 and p2 are zero then the line is completely

visible. Hence draw the line and go to step 9

b. If region codes for both endpoints are not zero and the logical ANDing of them is also

nonzero then the line is completely invisible. So reject the ling and go to 9

c. If region codes for two endpoints do not satisfy the condition in (4a and 4b the line is

partially visible.

6. Determine the intersecting edge of the clipping window by inspecting the region codes

of two endpoints

a. If region codes for both endpoints are non- zero, find intersecting point p'1 and p'2

with boundary edges of clipping window with respect to point p1 and point p2

respectively

b. If region codes for any one endpoints are non-zero, find intersecting point p'1 or p'2

with boundary edges of clipping window with respect to it.

7. Divide the Line segments considering intersection points

8. Reject the line segments if any one endpoint of it appears outsides the clipping

window

9. Draw the remaining line segments

10.Stop

PROGRAM:

#include<stdio.h>#include<conio.h>#include<graphics.h>#define LEFT_EDGE 0x1#define RIGHT_EDGE 0x2#define BOTTOM_EDGE 0x4#define TOP_EDGE 0x8#define INSIDE(a) (!a)#define REJECT(a,b) (a&b)#define ACCEPT(a,b) (!(a|b))#define FALSE 0#define TRUE 1struct point{

51

Page 54: Cg Lab Manual (New)

3110111040XXXXXXXXX

int x;int y;

}p1,p2,tmp;struct win{

int x;int y;

}winmin,winmax;unsigned char encode(struct point pt,struct win winmin,struct win winmax){

unsigned char code=0x00;if(pt.x<winmin.x)

code=code|LEFT_EDGE;if(pt.x>winmax.x)

code=code|RIGHT_EDGE;if(pt.y<winmin.y)

code=code|BOTTOM_EDGE;if(pt.y>winmax.y)

code=code|TOP_EDGE;return(code);

}void swappts(struct point *p1,struct point *p2){

tmp=*p1;*p1=*p2;*p2=tmp;

}void swapcodes(unsigned char *c1,unsigned char *c2){

unsigned char tmp;tmp=*c1;*c1=*c2;*c2=tmp;

}void clipline(struct win winmin, struct win winmax,struct point p1,struct point p2){

unsigned char code1,code2;int done=FALSE,draw=FALSE;float m;while(!done){

code1=encode(p1,winmin,winmax);code2=encode(p2,winmin,winmax);if(ACCEPT(code1,code2)){

done=TRUE;draw=TRUE;

}else if(REJECT(code1,code2))

done=TRUE;

52

Page 55: Cg Lab Manual (New)

3110111040XXXXXXXXX

else{

if(INSIDE(code1)){

swappts(&p1,&p2);swapcodes(&code1,&code2);

}if(p2.x!=p1.x)

m=(p2.y-p1.y)/(p2.x-p1.x);if(code1 &LEFT_EDGE){

p1.y+=(winmin.x-p1.x)*m;p1.x=winmin.x;

}else if(code1 &RIGHT_EDGE){

p1.y+=(winmax.x-p1.x)*m;p1.x=winmax.x;

}else if(code1 &BOTTOM_EDGE){

if(p2.x!=p1.x)p1.x+=(winmin.y-p1.y)/m;

p1.y=winmin.y;}else if(code1 &TOP_EDGE){

if(p2.x!=p1.x)p1.x+=(winmax.y-p1.y)/m;

p1.y=winmax.y;}

}}if(draw)line(p1.x,p1.y,p2.x,p2.y);

}void main(){

int c,gm,gr;clrscr();printf("\nEnter the window minimum coordinates");scanf("%d%d",&winmin.x,&winmin.y);printf("\nEnter the window max coordinates");scanf("%d%d",&winmax.x,&winmax.y);printf("\nEnter the starting point");scanf("%d%d",&p1.x,&p1.y);printf("\nenter the end point");scanf("%d%d",&p2.x,&p2.y);detectgraph(&gm,&gr);initgraph(&gm,&gr,"d:\\tc\\BGI");

53

Page 56: Cg Lab Manual (New)

3110111040XXXXXXXXX

printf("Before Clipping");line(p1.x,p1.y,p2.x,p2.y);rectangle(winmin.x,winmax.y,winmax.x,winmin.y);getch();clrscr();cleardevice();printf("After Clipping");rectangle(winmin.x,winmax.y,winmax.x,winmin.y);clipline(winmin,winmax,p1,p2);getch();

}

OUTPUT:Enter the window minimum coordinates: 100 100Enter the window maximum coordinates: 200 200

Enter the starting point: 150 150Enter the ending point: 200 200

54

Page 57: Cg Lab Manual (New)

3110111040XXXXXXXXX

RESULT:

Thus the program was successfully created and executed

55

Page 58: Cg Lab Manual (New)

3110111040XXXXXXXXX

EX NO :9 SUTHERLAND-HODGEMAN POLYGON CLIPPING ALGORITHMDATE :

AIM:

To implement polygon clipping.

ALGORITHM:

1. Get the minimum and maximum coordinates of both window and view port.

2. Get the number of sides of a polygon and its corresponding coordinates.

3. If the polygon lies within region code window, display it.

4. If any one of the polygon side is neither inside nor outside the boundary, find point of

intersection and clip the regions that lies outside the boundary.

5. Display the polygon after clipping

PROGRAM:

#include<stdio.h>#include<conio.h>#include<graphics.h>#include<math.h>void clip(float,float,float);int i,j=0,n;int rx1,rx2,ry1,ry2;float x1[8],y1[8];void main(){

int gd=DETECT,gm;int i,n;float x[8],y[8],m;clrscr();initgraph(&gd,&gm,"");printf("coordinates for rectangle : ");scanf("%d%d%d%d",&rx1,&ry1,&rx2,&ry2);printf("no. of sides for polygon : ");scanf("%d",&n);printf("coordinates : ");

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

scanf("%f%f",&x[i],&y[i]);}

56

Page 59: Cg Lab Manual (New)

3110111040XXXXXXXXX

cleardevice();outtextxy(10,10,"Before clipping");outtextxy(10,470,"Press any key....");rectangle(rx1,ry1,rx2,ry2);for(i=0;i<n-1;i++)

line(x[i],y[i],x[i+1],y[i+1]);line(x[i],y[i],x[0],y[0]);getch();cleardevice();for(i=0;i<n-1;i++){

m=(y[i+1]-y[i])/(x[i+1]-x[i]);clip(x[i],y[i],m);clip(x[i+1],y[i+1],m);

}m=(y[i]-y[0])/(x[i]-x[0]);clip(x[i],y[i],m);clip(x[0],y[0],m);outtextxy(10,10,"After clipping");outtextxy(10,470,"Press any key....");rectangle(rx1,ry1,rx2,ry2);for(i=0;i<j-1;i++)

line(x1[i],y1[i],x1[i+1],y1[i+1]);getch();

}

void clip(float e,float f,float m){

while(e<rx1 || e>rx2 || f<ry1 || f>ry2){

if(e<rx1){

f+=m*(rx1-e);e=rx1;

}

else if(e>rx2){

f+=m*(rx2-e);e=rx2;

}if(f<ry1)

57

Page 60: Cg Lab Manual (New)

3110111040XXXXXXXXX

{e+=(ry1-f)/m;f=ry1;

}else if(f>ry2){

e+=(ry2-f)/m;f=ry2;

}}x1[j]=e;y1[j]=f;j++;

}

OUTPUT:

RESULT:

Thus the program was successfully created and executed

58

Page 61: Cg Lab Manual (New)

3110111040XXXXXXXXX

EX NO :10 DRAWING 3D OBJECTS AND SCENES USING OPEN GL

DATE :

AIM:To draw three dimensional objects and scenes using OPENGL

PROCEDURE:

Steps to add opengl files in Microsoft visual studio 2010: 1. Open Microsoft Visual Studio 2010.2. File -> New -> Project -> Other Languages -> Visual C++ -> Empty Project.3. Enter project name and click OK.4. Right click on the project in the Solution Explorer (in RHS) and select Add -> new item.5. Select C++ File(.cpp), Enter file name and click Add.6. To hide other folders click on Show All Files icon at the top of Solution Explorer (Second icon from left).7. Right Click the project in the Solution Explorer and select Open Folder in Windows Explorer.8. Copy the Folder freeglut\include\gl (gl in small letters) to the folder opened in step 7.9. Copy the File freeglut\lib\freeglut.lib to the folder opened in Step 7.10.Copy the File freeglut\bin\freeglut.dll to the folder opened in Step 7.11. Refresh the Project in Solution Explorer.12. Right Click all the newly added file and select Include in Project.13. Write the code in the .cpp file created in step 5.

ALGORITHM:Main:

1.Initialise glut and create window. 2.Register call backs.3.Create a render function to render the desired shape and rotate it.4.Call glutMainLoop().RenderScene:1.Clear color and depth buffers.2.Reset transformations.3.Set the camera position.4.Rotate the object using glRotatef();5.Switch between the 3D objects according to the choice.6.End using glEnd().

59

Page 62: Cg Lab Manual (New)

3110111040XXXXXXXXX

PROGRAM:

#include "conio.h"#include "stdio.h"#include "gl\glut.h"#include "gl\freeglut.h"using namespace std;

float angle = 0.0f;int choice;

void changeSize(int w, int h) {

// Prevent a divide by zero, when window is too short// (you cant make a window of zero width).if (h == 0)

h = 1;float ratio = w * 1.0 / h;

// Use the Projection MatrixglMatrixMode(GL_PROJECTION);

// Reset MatrixglLoadIdentity();

// Set the viewport to be the entire windowglViewport(0, 0, w, h);

// Set the correct perspective.gluPerspective(45.0f, ratio, 0.1f, 100.0f);

// Get Back to the ModelviewglMatrixMode(GL_MODELVIEW);

}void renderScene(void) {

// Clear Color and Depth BuffersglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

// Reset transformationsglLoadIdentity();

// Set the camera

60

Page 63: Cg Lab Manual (New)

3110111040XXXXXXXXX

gluLookAt(0.0f, 0.0f, 10.0f,0.0f, 0.0f, 0.0f,0.0f, 1.0f, 0.0f);

glRotatef(angle, 1.0f, 0.0f, 0.0f);

switch(choice){

case 1: glutWireTeapot(1); break;

case 2: glutWireTorus(1,3,20,30);break;

case 3: glutWireCone(3,5,30,30);break;

case 4: glutWireSphere(3,30,30);break;

case 5: glutWireCube(5);break;

case 6: exit(0);}

glEnd();angle+=0.1f;glutSwapBuffers();

}

int main(int argc, char **argv){

printf("3D OBJECTS AND SCENES USING OPENGL\n\n");printf("MENU\n");printf("1. TEA POT\n2. TORUS\n3. CONE\n4. SPHERE\n5. CUBE\n6. EXIT"); printf("\nEnter Choice: ");scanf("%d", &choice);

// init GLUT and create WindowglutInit(&argc, argv);glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);glutInitWindowPosition(100,100);glutInitWindowSize(640,480);glutCreateWindow(”Objects Drawn here");

// register callbacks

61

Page 64: Cg Lab Manual (New)

3110111040XXXXXXXXX

glutDisplayFunc(renderScene);glutReshapeFunc(changeSize);glutIdleFunc(renderScene);

// enter GLUT event processing cycleglutMainLoop();

return 1;}

OUTPUT:

RESULT:Thus the program was successfully created and executed

62