+ All Categories

cg3

Date post: 27-Oct-2014
Category:
Upload: shubhangi
View: 23 times
Download: 3 times
Share this document with a friend
26
Program For Bezier Curves #include<stdio.h> #include<conio.h> #include<graphics.h> int gd,gm,maxx,maxy; float xxx[4][2]; void line1(float x2,float y2) { line(xxx[0][0],xxx[0][1],x2,y2); xxx[0][0]=x2; xxx[0][1]=y2; } void bezier(float xb,float yb,float xc,float yc,float xd,float yd,int n) { float xab,yab,xbc,ybc,xcd,ycd; float xabc,yabc,xbcd,ybcd; float xabcd,yabcd; if(n==0) { line1(xb,yb); line1(xc,yc); line1(xd,yd); } else { xab=(xxx[0][0]+xb)/2; yab=(xxx[0][1]+yb)/2; xbc=(xb+xc)/2; ybc=(yb+yc)/2; xcd=(xc+xd)/2; ycd=(yc+yd)/2; xabc=(xab+xbc)/2; yabc=(yab+ybc)/2; xbcd=(xbc+xcd)/2; ybcd=(ybc+ycd)/2; xabcd=(xabc+xbcd)/2; yabcd=(yabc+ybcd)/2; n=n-1; bezier(xab,yab,xabc,yabc,xabcd,yabcd,n);
Transcript
Page 1: cg3

Program For Bezier Curves

#include<stdio.h>#include<conio.h>#include<graphics.h>int gd,gm,maxx,maxy;float xxx[4][2];void line1(float x2,float y2){line(xxx[0][0],xxx[0][1],x2,y2);xxx[0][0]=x2;xxx[0][1]=y2;}

void bezier(float xb,float yb,float xc,float yc,float xd,float yd,int n){float xab,yab,xbc,ybc,xcd,ycd;float xabc,yabc,xbcd,ybcd;float xabcd,yabcd;

if(n==0){line1(xb,yb);line1(xc,yc);line1(xd,yd);}else{xab=(xxx[0][0]+xb)/2;yab=(xxx[0][1]+yb)/2;xbc=(xb+xc)/2;ybc=(yb+yc)/2;xcd=(xc+xd)/2;ycd=(yc+yd)/2;xabc=(xab+xbc)/2;yabc=(yab+ybc)/2;xbcd=(xbc+xcd)/2;ybcd=(ybc+ycd)/2;xabcd=(xabc+xbcd)/2;yabcd=(yabc+ybcd)/2;n=n-1;bezier(xab,yab,xabc,yabc,xabcd,yabcd,n);bezier(xbcd,ybcd,xcd,ycd,xd,yd,n);}

}void main(){int i;float temp1,temp2;for(i=0;i<4;i++){

Page 2: cg3

printf("enter (x)coordinat of point%d : ",i+1);scanf("%f",&temp1);printf("enter (y)coordinat of point%d : ",i+1);scanf("%f",&temp2);xxx[i][0]=temp1;xxx[i][1]=temp2;}detectgraph(&gd,&gm);initgraph(&gd,&gm,"c:\\tc\\bgi");line(0,240,640,240);line(320,0,320,640);outtextxy(590,260,"x-axis");outtextxy(320,430,"y-axis");outtextxy(200,5,"Bezier Curves");bezier(xxx[1][0],xxx[1][1],xxx[2][0],xxx[2][1],xxx[3][0],xxx[3][1],8);getch();closegraph();}

Page 3: cg3
Page 4: cg3

Program For Scan Line Algorithm For Filling Polygon

#include<stdio.h>#include<conio.h>#include<graphics.h>/* Defining the structure to store edges */struct edge{int x1;int y1;int x2;int y2;int flag;};void main(){int gd = DETECT, gm, n, i, j, k;struct edge ed[10],temped;float dx,dy,m[10],x_int[10],inter_x[10];int x[10],y[10],ymax = 0, ymin = 480, yy,temp;initgraph (&gd, &gm, "c:\\tc\\bgi");/* Read the number of vertices of the polygon */printf("Enter the number vertices of the graph: ");scanf("%d", &n);/* Read the vertices of the polygon and also find Ymax and Ymin */printf("Enter the vertices: \n");for(i = 0; i < n; i++){printf("x[%d] : ", i);scanf("%d", &x[i]);printf("y[%d] : ", i);scanf("%d", &y[i]);if(y[i] > ymax)ymax = y[i];if(y[i] < ymin)ymin = y[i];ed[i].x1 = x[i];ed[i].y1 = y[i];}cleardevice();line(0,240,640,240);line(320,0,320,640);outtextxy(590,260,"x-axis");outtextxy(320,430,"y-axis");outtextxy(200,5,"Scan Line Algorithm For Filling Polygon");/* Store the edge information */for(i=0;i<n-1;i++){ed[i].x2 = ed[i+1].x1;

Page 5: cg3

ed[i].y2 = ed[i+1].y1;ed[i].flag=0;}ed[i].x2 = ed[0].x1;ed[i].y2 = ed[0].y1;ed[i].flag=0;

/* Check for y1>y2, if not interchange y1 and y2 with corresponding x1 and x2 */for(i=0;i<n;i++){ if(ed[i].y1 < ed[i].y2) { temp = ed[i].x1; ed[i].x1=ed[i].x2; ed[i].x2=temp; temp = ed[i].y1; ed[i].y1=ed[i].y2; ed[i].y2=temp; }}

/* Draw the polygon */for(i=0;i<n;i++){line(ed[i].x1,ed[i].y1,ed[i].x2,ed[i].y2);}

/* sorting of edges in the order of y1,y2,x1 */ for(i=0;i<n-1;i++) { for(j=0;j<n-1;j++) {

if(ed[j].y1<ed[j+1].y1) { temped = ed[j]; ed[j]=ed[j+1]; ed[j+1] = temped; } if(ed[j].y1==ed[j+1].y1) {

if(ed[j].y2<ed[j+1].y2){temped = ed[j];ed[j]=ed[j+1];ed[j+1] = temped;} if(ed[j].y2==ed[j+1].y2){

if(ed[j].x1<ed[j+1].x1){

Page 6: cg3

temped = ed[j];ed[j]=ed[j+1];ed[j+1] = temped;

}}

}

} }/* calculating 1/slope of each edge and storing top xcoordinate of the edge --------------------------- */for(i=0;i<n;i++){dx = ed[i].x2 - ed[i].x1;dy = ed[i].y2 - ed[i].y1;if(dy==0){m[i]=0;}else{m[i] = dx/dy;}inter_x[i]= ed[i].x1;}

yy=ymax;while(yy>ymin){/* Marking active egdes*/ for(i=0;i<n;i++) { if(yy > ed[i].y2 && yy <= ed[i].y1 && ed[i].y1!=ed[i].y2)

{ ed[i].flag = 1; } else { ed[i].flag = 0; }

}/* Finding the x intersections */ j=0; for(i=0;i<n;i++) {

if(ed[i].flag==1) {

if(yy==ed[i].y1) { x_int[j]=ed[i].x1;

Page 7: cg3

j++;if(ed[i-1].y1==yy && ed[i-1].y1<yy){ x_int[j]=ed[i].x1; j++;}if(ed[i+1].y1==yy && ed[i+1].y1<yy){ x_int[j]=ed[i].x1; j++;}

}else{x_int[j] = inter_x[i]+(-m[i]);inter_x[i]=x_int[j];j++;}

} }/* Sorting the x intersections*/

for(i=0;i<j;i++){ for(k=0;k<j-1;k++) { if(x_int[k]>x_int[k+1]) { temp =x_int[k]; x_int[k] = x_int[k+1]; x_int[k+1] = temp; } }}

/* Extracting pairs of x values to draw lines*/for(i=0;i<j;i+=2){line(x_int[i],yy,x_int[i+1],yy);}

yy--; }getch();}

Page 8: cg3
Page 9: cg3

Program For Sutherland-Hodgeman Polygon Clipping

#include<stdio.h>#include<graphics.h>#include<math.h>typedef struct{float x;float y;}PT;int n;void main(){int i,j,gd,gm;PT d,p1,p2,p[20],pi1,pi2,pp[20];detectgraph(&gd,&gm);initgraph(&gd,&gm,"c:\\tc\\bgi");/* Read coordinates of clipping window */printf("Enter coordinate X (left,top) of point1 : ");scanf("%f",&p1.x);printf("Enter coordinate Y (left,top) of point1 : ");scanf("%f",&p1.y);printf("Enter coordinates X(right,bottom) of point2 : ");scanf("%f",&p2.x);printf("Enter coordinate Y (right,bottom) of point2 : ");scanf("%f",&p2.y);

/* Enter the number of vertex */printf("Enter the number of vertex : ");scanf("%d",&n);

/* Read vertex coordinates of clipping window */for(i=0;i<n;i++){printf("Enter x coordinate of vertex %d : ",i+1);scanf("%f",&p[i].x);printf("Enter y coordinate of vertex %d : ",i+1);scanf("%f",&p[i].y);}p[i].x = p[0].x;p[i].y = p[0].y;cleardevice();line(0,240,640,240);line(320,0,320,640);outtextxy(590,260,"x-axis");outtextxy(320,430,"y-axis");outtextxy(200,5,"Sutherland-Hodgeman Polygon clipping");drawpolygon(p,n);rectangle(p1.x,p1.y,p2.x,p2.y);getch();left(p1,p,pp);

Page 10: cg3

right(p2,p,pp);top(p1,p,pp);bottom(p2,p,pp);cleardevice();line(0,240,640,240);line(320,0,320,640);outtextxy(590,260,"x-axis");outtextxy(320,430,"y-axis");outtextxy(200,5,"Sutherland-Hodgeman Polygon clipping");rectangle(p1.x,p1.y,p2.x,p2.y);drawpolygon(p,n);getch();closegraph();}

left(PT p1,PT p[20],PT pp[20]){int i,j=0;for(i=0;i<n;i++){

if(p[i].x < p1.x && p[i+1].x >= p1.x){

if(p[i+1].x-p[i].x!=0){pp[j].y = (p[i+1].y-p[i].y)/(p[i+1].x-p[i].x)*

(p1.x-p[i].x)+p[i].y;}else{pp[j].y = p[i].y;}

pp[j].x = p1.x;j++;pp[j].x=p[i+1].x;pp[j].y=p[i+1].y;j++;}if(p[i].x > p1.x && p[i+1].x >= p1.x){pp[j].y = p[i+1].y;pp[j].x = p[i+1].x;j++;}if(p[i].x > p1.x && p[i+1].x <= p1.x){

if(p[i+1].x-p[i].x!=0){pp[j].y = (p[i+1].y-p[i].y)/(p[i+1].x-p[i].x)*

(p1.x-p[i].x)+p[i].y;}else

Page 11: cg3

{pp[j].y = p[i].y;}

pp[j].x = p1.x;j++;}

}for(i=0;i<j;i++){p[i].x = pp[i].x;p[i].y = pp[i].y;}p[i].x = pp[0].x;p[i].y = pp[0].y;n=j;

return;}

right(PT p2,PT p[20],PT pp[20]){int i,j=0;for(i=0;i<n;i++){

if(p[i].x > p2.x && p[i+1].x <= p2.x){

if(p[i+1].x-p[i].x!=0){pp[j].y = (p[i+1].y-p[i].y)/(p[i+1].x-p[i].x)*

(p2.x-p[i].x)+p[i].y;}else{pp[j].y = p[i].y;}

pp[j].x = p2.x;j++;pp[j].x=p[i+1].x;pp[j].y=p[i+1].y;j++;}if(p[i].x < p2.x && p[i+1].x <= p2.x){pp[j].y = p[i+1].y;pp[j].x = p[i+1].x;j++;}if(p[i].x < p2.x && p[i+1].x >= p2.x){

if(p[i+1].x-p[i].x!=0){

Page 12: cg3

pp[j].y = (p[i+1].y-p[i].y)/(p[i+1].x-p[i].x)* (p2.x-p[i].x)+p[i].y;

}else{pp[j].y = p[i].y;}

pp[j].x = p2.x;j++;}

}for(i=0;i<j;i++){p[i].x = pp[i].x;p[i].y = pp[i].y;}p[i].x = pp[0].x;p[i].y = pp[0].y;n=j;

return;}

top(PT p1,PT p[20],PT pp[20]){int i,j=0;for(i=0;i<n;i++){

if(p[i].y < p1.y && p[i+1].y >= p1.y){

if(p[i+1].y-p[i].y!=0){pp[j].x = (p[i+1].x-p[i].x)/(p[i+1].y-p[i].y)*

(p1.y-p[i].y)+p[i].x;}else{pp[j].x = p[i].x;}

pp[j].y = p1.y;j++;pp[j].x=p[i+1].x;pp[j].y=p[i+1].y;j++;}if(p[i].y > p1.y && p[i+1].y >= p1.y){pp[j].y = p[i+1].y;pp[j].x = p[i+1].x;j++;}if(p[i].y > p1.y && p[i+1].y <= p1.y)

Page 13: cg3

{if(p[i+1].y-p[i].y!=0){pp[j].x = (p[i+1].x-p[i].x)/(p[i+1].y-p[i].y)*

(p1.y-p[i].y)+p[i].x;}else{pp[j].x = p[i].x;}

pp[j].y = p1.y;j++;}

}for(i=0;i<j;i++){p[i].x = pp[i].x;p[i].y = pp[i].y;}p[i].x = pp[0].x;p[i].y = pp[0].y;n=j;

return;}

bottom(PT p2,PT p[20],PT pp[20]){int i,j=0;for(i=0;i<n;i++){

if(p[i].y > p2.y && p[i+1].y <= p2.y){

if(p[i+1].y-p[i].y!=0){pp[j].x = (p[i+1].x-p[i].x)/(p[i+1].y-p[i].y)*

(p2.y-p[i].y)+p[i].x;}else{pp[j].x = p[i].x;}

pp[j].y = p2.y;j++;pp[j].x=p[i+1].x;pp[j].y=p[i+1].y;j++;}if(p[i].y < p2.y && p[i+1].y <= p2.y){pp[j].y = p[i+1].y;

Page 14: cg3

pp[j].x = p[i+1].x;j++;}if(p[i].y < p2.y && p[i+1].y >= p2.y){

if(p[i+1].y-p[i].y!=0){pp[j].x = (p[i+1].x-p[i].x)/(p[i+1].y-p[i].y)*

(p2.y-p[i].y)+p[i].x;}else{pp[j].x = p[i].x;}

pp[j].y = p2.y;j++;}

}for(i=0;i<j;i++){p[i].x = pp[i].x;p[i].y = pp[i].y;}p[i].x = pp[0].x;p[i].y = pp[0].y;n=j;

return;}

drawpolygon(PT x[20],int n){int i;for(i=0;i<n-1;i++)

{ line(x[i].x,x[i].y,x[i+1].x,x[i+1].y);} line(x[i].x,x[i].y,x[0].x,x[0].y);

return;}

Page 15: cg3
Page 16: cg3
Page 17: cg3

Program for ANIMATION

#include <stdio.h>#include <graphics.h>#include <conio.h>void main(){void far line();int gdriver;int gmode,maxx,maxy,i,j;int scale [2][2] ={2,0,0,2};float scale1 [2][2] ={2,0,0,2};

int tri [76] [2];int tri1 [66] [2] ={0,8,7,8,0,8,8,6,7,8,8,12,7,8,10,5,8,12,21,12};int tri2 [66] [2] ={21,12,31,27,31,27,53,36,53,36,50,30,50,30,54,32,54,32,53,29,53,29,55,30,55,30,53,26};int tri3 [66] [2] =

Page 18: cg3

{27,13,38,25,38,25,53,26,53,26,56,26,56,26,70,35,70,35,66,28,66,28,72,30,72,30,67,26,67,26,74,29,74,29,52,10,52,10,44,7};int tri4 [66] [2] ={44,7,52,10,52,10,80,10,80,10,42,0,42,0,36,0,36,0,23,4,23,4,10,5};int tri5 [66] [2] ={11,7,11,9,11,9,13,9,13,9,13,7,13,7,11,7};detectgraph(&gdriver,&gmode);if(gdriver < 0){puts("Cannot detect a graphics card");exit(1);}initgraph(&gdriver, &gmode, "c:\\tc\\bgi");

Page 19: cg3

cleardevice();

setbkcolor(0);setcolor(15);maxy=getmaxy();for(i=0;i<10;i++){j=i;

tri[j][0] = tri1[i][0]*scale[0][0]+tri1[i][1]*scale[1][0];

tri[j][1] = tri1[i][0]*scale[0][1]+tri1[i][1]*scale[1][1];}for(i=0;i<14;i++){ j=i+10;

tri[j][0] = tri2[i][0]*scale[0][0]+tri2[i][1]*scale[1][0];

tri[j][1] = tri2[i][0]*scale[0][1]+tri2[i][1]*scale[1][1];}for(i=0;i<20;i++){ j=i+24;

tri[j][0] = tri3[i][0]*scale1[0][0]+tri3[i][1]*scale1[1][0];

tri[j][1] = tri3[i][0]*scale1[0][1]+tri3[i][1]*scale1[1][1];}for(i=0;i<14;i++){ j=i+44;

tri[j][0] = tri4[i][0]*scale[0][0]+tri4[i][1]*scale[1][0];

tri[j][1] = tri4[i][0]*scale[0][1]+tri4[i][1]*scale[1][1];}for(i=0;i<8;i++){ j=i+58;

tri[j][0] = tri5[i][0]*scale[0][0]+tri5[i][1]*scale[1][0];

tri[j][1] = tri5[i][0]*scale[0][1]+tri5[i][1]*scale[1][1];}for(j=500;j>100;){

for (i=0;i<72;){ line(j+tri[i][0],maxy/2-tri[i][1],j+tri[i+1]

[0],maxy/2-tri[i+1][1]);i=i+2;}

delay(20);j=j-1;

for (i=0;i<72;)

Page 20: cg3

{ line(j+tri[i][0],maxy/2-tri[i][1],j+tri[i+1][0],maxy/2-tri[i+1][1]);

i=i+2;}

j=j+1;setcolor(0);

for (i=0;i<72;) { line(j+tri[i][0],maxy/2-tri[i][1],j+tri[i+1][0],maxy/2-tri[i+1][1]);

i=i+2;}

setcolor(15);j=j-1;

for (i=0;i<72;) { line(j+tri[i][0],maxy/2-tri[i][1],j+tri[i+1][0],maxy/2-tri[i+1][1]);

i=i+2;}

}getch();closegraph();}

Page 21: cg3

Recommended