15
Bresenham Line Drawing – C++ Program #include<iostream.h> #include<graphics.h> #include<conio.h> #include<math.h> int signs(int m); void bres_line(int,int,int,int); void main() { int gd=DETECT,gm; int x1,x2,y1,y2; initgraph(&gd,&gm,"c:\\tc\\bgi"); cout<<"enter starting value of X-Axis----->"; cin>>x1; cout<<"enter starting value of Y-Axis----->"; cin>>y1; cout<<"enter ending value of X-Axis----->"; cin>>x2; cout<<"enter ending value of y-Axis----->"; cin>>y2; bres_line(x1,y1,x2,y2); getch(); closegraph(); } void bres_line(int x1,int y1,int x2,int y2) { int x,y,sx,sy,p,temp,exch=0,i,dx,dy; x=x1; y=y1; dy=abs(y1-y2); dx=abs(x1-x2); sx=signs(x2-x1); sy=signs(y2-y1); if(dy>dx) { temp=dx; dx=dy; dy=temp;

Source Programs for Graphics Lab

Embed Size (px)

Citation preview

Page 1: Source Programs for Graphics Lab

Bresenham Line Drawing – C++ Program

#include<iostream.h>#include<graphics.h>#include<conio.h>#include<math.h> int signs(int m);void bres_line(int,int,int,int);void main(){int gd=DETECT,gm;int x1,x2,y1,y2;initgraph(&gd,&gm,"c:\\tc\\bgi");cout<<"enter starting value of X-Axis----->";cin>>x1;cout<<"enter starting value of Y-Axis----->";cin>>y1;cout<<"enter ending value of X-Axis----->";cin>>x2;cout<<"enter ending value of y-Axis----->";cin>>y2;bres_line(x1,y1,x2,y2);getch();closegraph();}void bres_line(int x1,int y1,int x2,int y2){int x,y,sx,sy,p,temp,exch=0,i,dx,dy;x=x1;y=y1;dy=abs(y1-y2);dx=abs(x1-x2);sx=signs(x2-x1);sy=signs(y2-y1);if(dy>dx){temp=dx;dx=dy;dy=temp;exch=1;}p=2*dy-dx;for(i=0;i<=dx;i++){putpixel(x,y,15);

Page 2: Source Programs for Graphics Lab

if(exch==1)y+=sy;elsex+=sx;if(p>=0){if(exch==1)x+=sx;elsey+=sy;p=p-2*dx;}p=p+2*dy;}}int signs(int m){if(m<0)return(-1);else if(m>0)return(1);elsereturn(0);}

Bresenham Circle Drawing – C Program

# include<stdio.h># include<conio.h># include<graphics.h># include<math.h>void main(){int gd=DETECT,gm;int r,x,y,p,xc=320,yc=240;initgraph(&gd,&gm,"C:\\TC\\BGI");cleardevice();printf("Enter the radius ");scanf("%d",&r);x=0;y=r;putpixel(xc+x,yc-y,1);p=3-(2*r);for(x=0;x<=y;x++){if (p<0){y=y;

Page 3: Source Programs for Graphics Lab

p=(p+(4*x)+6);}else{y=y-1;p=p+((4*(x-y)+10));}putpixel(xc+x,yc-y,1);putpixel(xc-x,yc-y,2);putpixel(xc+x,yc+y,3);putpixel(xc-x,yc+y,4);putpixel(xc+y,yc-x,5);putpixel(xc-y,yc-x,6);putpixel(xc+y,yc+x,7);putpixel(xc-y,yc+x,8);}getch();closegraph();}

Bresenham Ellipse Drawing – C Program

#include <stdio.h>#include <conio.h>#include <graphics.h>#include <math.h>#include <dos.h>void main(){long int d1,d2;int i,gd=DETECT ,gm,x,y;long int rx,ry,rxsq,rysq,tworxsq,tworysq,dx,dy;printf("Enter the x Radius of the ellipse");scanf("%ld",&rx);printf("Enter the y Radius of the ellipse");scanf("%ld",&ry);initgraph(&gd,&gm,"C:\\TC\\BGI");rxsq=rx*rx;rysq=ry*ry;tworxsq=2*rxsq;tworysq=2*rysq;x=0;y=ry;d1=rysq - (rxsq * ry) + (0.25 * rxsq);dx= tworysq * x;dy= tworxsq * y;

Page 4: Source Programs for Graphics Lab

do{putpixel(200+x,200+y,15);putpixel(200-x,200-y,15);putpixel(200+x,200-y,15);putpixel(200-x,200+y,15);if (d1 < 0){x=x+1;y=y;dx=dx + tworysq;d1=d1 + dx + rysq;}else{x=x+1;y=y-1;dx= dx + tworysq;dy= dy - tworxsq;d1= d1 + dx - dy + rysq;}delay(50);}while (dx < dy);d2 = rysq * ( x + 0.5) * ( x + 0.5 ) + rxsq * (y - 1) * (y-1) - rxsq * rysq;do{putpixel(200+x,200+y,15);putpixel(200-x,200-y,15);putpixel(200+x,200-y,15);putpixel(200-x,200+y,15);if (d2 >0){x=x;y=y-1;dy = dy - tworxsq;d2 = d2 - dy + rxsq;}else{x= x+1;y=y-1;dy=dy - tworxsq;dx= dx + tworysq;d2 = d2 + dx -dy + rxsq;}delay(50);

Page 5: Source Programs for Graphics Lab

} while ( y> 0);getch();closegraph();}

2 - Dimensional Transformations – C++ Program

#include<iostream.h>#include<conio.h>#include<math.h>#include<stdio.h>#include<graphics.h>#include<dos.h>void drawborder(float xmid,float ymid)

{line(0,0,2*xmid,0);line(0,0,0,2*ymid);line(0,2*ymid,2*xmid,2*ymid);line(2*xmid,0,2*xmid,2*ymid);line(xmid,0,xmid,2*ymid);line(0,ymid,2*xmid,ymid);setcolor(YELLOW);outtextxy(xmid+2,ymid,"0,0");outtextxy(2*xmid-60,ymid,"+x-axis");outtextxy(30,ymid,"-x axis");outtextxy(xmid,0,"+ y-axis");outtextxy(xmid,2*ymid-10,"-y axis");setcolor(MAGENTA);for(int i=-320;i<320;i=i+5)

{delay(20);line(i+xmid,ymid-3,i+xmid,ymid+3);}for(i=-220;i<220;i=i+5)

{delay(20);line(-3+xmid,ymid-i,3+xmid,ymid-i);}}

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

void translation(float x1,float y1,float x2,float y2,float x3,float y3){float xnew1,ynew1,xnew2,ynew2,xnew3,ynew3,tx,ty,xmid,ymid;cout<<"\n\nEnter tx and ty:";cin>>tx>>ty;int gdriver = DETECT, gmode;initgraph(&gdriver, &gmode, "c:\\tc\\bgi");

Page 6: Source Programs for Graphics Lab

xmid=(getmaxx())/2;ymid=(getmaxy())/2;drawborder(xmid,ymid);xnew1=x1+xmid;ynew1=ymid-y1;xnew2=x2+xmid;ynew2=ymid-y2;xnew3=x3+xmid;ynew3=ymid-y3;setcolor(GREEN);triangle(xnew1,ynew1,xnew2,ynew2,xnew3,ynew3);getch();setcolor(RED);triangle(xnew1+tx,ynew1-ty,xnew2+tx,ynew2-ty,xnew3+tx,ynew3-ty);getch();closegraph();}//translation ends

//---------------------------------------------------------------------void rotation(float x1,float y1,float x2,float y2,float x3,float y3)

{clrscr();cout<<"<<<<<<WELCOME TO ROTATION MENU >>>>>>>>>>>>>>>>";int type;float xnew1,ynew1,xnew2,ynew2,xnew3,ynew3,theta,xmid,ymid,xref,yref;cout<<"\n\nEnter rotation angle :";cin>>theta;cout<<"\n Rotaton type -:";cout<<"\n 1. clockwise ";cout<<"\n 2. anticlock wise";cin>>type;theta=((3.14/180)*theta);cout<<"Enter reference coordinates :";cin>>xref>>yref;int gdriver = DETECT, gmode;initgraph(&gdriver, &gmode, "c:\\tc\\bgi");xmid=(getmaxx())/2;ymid=(getmaxy())/2;drawborder(xmid,ymid);x1=x1+xmid;y1=ymid-y1;x2=x2+xmid;y2=ymid-y2;x3=x3+xmid;y3=ymid-y3;xref=xref+xmid;yref=ymid-yref;

Page 7: Source Programs for Graphics Lab

setcolor(LIGHTGREEN);triangle(x1,y1,x2,y2,x3,y3);getch();

if(type==1){

xnew1=xref+(x1-xref)*cos(theta)-(y1-yref)*sin(theta);ynew1=yref+(x1-xref)*sin(theta)+(y1-yref)*cos(theta);xnew2=xref+(x2-xref)*cos(theta)-(y2-yref)*sin(theta);ynew2=yref+(x2-xref)*sin(theta)+(y2-yref)*cos(theta);xnew3=xref+(x3-xref)*cos(theta)-(y3-yref)*sin(theta);ynew3=yref+(x3-xref)*sin(theta)+(y3-yref)*cos(theta);

}if(type==2)

{xnew1=xref+(x1-xref)*cos(-theta)-(y1-yref)*sin(-theta);

ynew1=yref+(x1-xref)*sin(-theta)+(y1-yref)*cos(-theta);xnew2=xref+(x2-xref)*cos(-theta)-(y2-yref)*sin(-theta);ynew2=yref+(x2-xref)*sin(-theta)+(y2-yref)*cos(-theta);xnew3=xref+(x3-xref)*cos(-theta)-(y3-yref)*sin(-theta);ynew3=yref+(x3-xref)*sin(-theta)+(y3-yref)*cos(-theta);

}setcolor(LIGHTRED);triangle(xnew1,ynew1,xnew2,ynew2,xnew3,ynew3);getch();closegraph();

}//rotation ends//---------------------------------------------void scaling(float x1,float y1,float x2,float y2,float x3,float y3)

{float xnew1,ynew1,xnew2,ynew2,xnew3,ynew3,xmid,ymid,xref,yref,sx,sy;cout<<"\nEnter reference coordinates :";cin>>xref>>yref;cout<<"\nEnter scaling parameters sx,sy:";cin>>sx>>sy;int gdriver = DETECT, gmode;initgraph(&gdriver, &gmode, "c:\\tc\\bgi");xmid=(getmaxx())/2;ymid=(getmaxy())/2;drawborder(xmid,ymid);x1=x1+xmid;y1=ymid-y1;x2=x2+xmid;y2=ymid-y2;x3=x3+xmid;y3=ymid-y3;xref=xref+xmid;

Page 8: Source Programs for Graphics Lab

yref=ymid-yref;setcolor(GREEN);triangle(x1,y1,x2,y2,x3,y3);getch();xnew1=x1*sx+xref*(1-sx);ynew1=y1*sy+yref*(1-sy);xnew2=x2*sx+xref*(1-sx);ynew2=y2*sy+yref*(1-sy);xnew3=x3*sx+xref*(1-sx);ynew3=y3*sy+yref*(1-sy);setcolor(LIGHTRED);triangle(xnew1,ynew1,xnew2,ynew2,xnew3,ynew3);getch();closegraph();}//scaling ends

//-----------------------------------------------------void shearing(float x1,float y1,float x2,float y2,float x3,float y3)

{int ch;float xnew1,ynew1,xnew2,ynew2,xnew3,ynew3,xmid,ymid,xref,yref,shx,shy;cout<<"\nEnter reference coordinates :";cin>>xref>>yref;cout<<"\nEnter shearing parameters shx,shy:";cin>>shx>>shy;cout<<"\nShearing about X-Axis or Y Axis ?? ";cin>>ch;int gdriver = DETECT, gmode;initgraph(&gdriver, &gmode, "c:\\tc\\bgi");xmid=(getmaxx())/2;ymid=(getmaxy())/2;drawborder(xmid,ymid);x1=x1+xmid;y1=ymid-y1;x2=x2+xmid;y2=ymid-y2;x3=x3+xmid;y3=ymid-y3;xref=xref+xmid;yref=ymid-yref;setcolor(GREEN);triangle(x1,y1,x2,y2,x3,y3);getch();if(ch==1)

{xnew1=x1+shx*(y1-yref);ynew1=y1;

Page 9: Source Programs for Graphics Lab

xnew2=x2+shx*(y2-yref);ynew2=y2;xnew3=x3+shx*(y3-yref);ynew3=y3;setcolor(LIGHTRED);triangle(xnew1,ynew1,xnew2,ynew2,xnew3,ynew3);

}else if(ch==2)

{xnew1=x1;ynew1=shy*(x1-xref)+y1;xnew2=x2;ynew2=shy*(x2-xref)+y2;xnew3=x3;ynew3=shy*(x3-xref)+y3;setcolor(RED);triangle(xnew1,ynew1,xnew2,ynew2,xnew3,ynew3);}getch();

closegraph();}//shearing ends

//---------------------------------------------------------------void reflection(float x1,float y1,float x2,float y2,float x3,float y3)

{int ch;float xnew1,ynew1,xnew2,ynew2,xnew3,ynew3,xmid,ymid,yref;

float xx1,yy1,xx2,yy2,xx3,yy3;clrscr();cout<<"<<<<<<<<WELCOME TO REFLECTION

MENU>>>>>>>>>>>>>>>>>>>>";cout<<"\n1.about X-Axis";cout<<"\n2.about Y-Axis";cout<<"\n3.about ORIGIN";cout<<"\n4.about line y=x";cout<<"\n5.about line y=-x";cout<<"\n 0.to EXIT";cin>>ch;int gdriver = DETECT, gmode;initgraph(&gdriver, &gmode, "c:\\tc\\bgi");xmid=(getmaxx())/2;ymid=(getmaxy())/2;drawborder(xmid,ymid);xnew1=x1+xmid;ynew1=ymid-y1;xnew2=x2+xmid;ynew2=ymid-y2;

Page 10: Source Programs for Graphics Lab

xnew3=x3+xmid;ynew3=ymid-y3;setcolor(GREEN);triangle(xnew1,ynew1,xnew2,ynew2,xnew3,ynew3);getch();setcolor(RED);switch(ch)

{case 1:

{xnew1=x1+xmid;ynew1=ymid+y1;xnew2=x2+xmid;ynew2=ymid+y2;xnew3=x3+xmid;ynew3=ymid+y3;triangle(xnew1,ynew1,xnew2,ynew2,xnew3,ynew3);getch();break;}

case 2:{xnew1=-x1+xmid;ynew1=ymid-y1;xnew2=-x2+xmid;ynew2=ymid-y2;xnew3=-x3+xmid;ynew3=ymid-y3;triangle(xnew1,ynew1,xnew2,ynew2,xnew3,ynew3);getch();break;}

case 3:{floatxnew1=-x1+xmid;ynew1=ymid+y1;xnew2=-x2+xmid;ynew2=ymid+y2;xnew3=-x3+xmid;ynew3=ymid+y3;triangle(xnew1,ynew1,xnew2,ynew2,xnew3,ynew3);getch();break;}

case 4:

Page 11: Source Programs for Graphics Lab

{line(y1+xmid,ymid-x1,y2+xmid,ymid-x2);line(y2+xmid,ymid-x2,y3+xmid,ymid-x3);line(y3+xmid,ymid-x3,y1+xmid,ymid-x1);getch();break;}

case 5:{xx1=-y1+xmid;yy1=ymid+x1;xx2=-y2+xmid;yy2=ymid+x2;xx3=-y3+xmid;yy3=ymid+x3;triangle(xx1,yy1,xx2,yy2,xx3,yy3);getch();break;}

default:break;

}//switch ends}//reflection ends//---------------------------------------------------------------------------void main()

{clrscr();int choice;float x1,y1,x2,y2,x3,y3;do

{clrscr();

cout<<"\nTRANSFORMATIONS MENU\n";cout<<"\n1. translation";cout<<"\n2. rotation";cout<<"\n3. Scaling";cout<<"\n4. Reflection";cout<<"\n5. Shearing";cout<<"\n0. EXIT\n";cin>>choice;clrscr();switch(choice)

{case 1://translation

{cout<<"Enter coordinates of triangle :";

Page 12: Source Programs for Graphics Lab

cin>>x1>>y1>>x2>>y2>>x3>>y3;translation(x1,y1,x2,y2,x3,y3);break;}

case 2://rotation{cout<<"Enter coordinates of triangle :";cin>>x1>>y1>>x2>>y2>>x3>>y3;rotation(x1,y1,x2,y2,x3,y3);break;}

case 3://scaling{cout<<"Enter coordinates of triangle :";cin>>x1>>y1>>x2>>y2>>x3>>y3;scaling(x1,y1,x2,y2,x3,y3);break;}

case 4:{cout<<"Enter coordinates of triangle :";cin>>x1>>y1>>x2>>y2>>x3>>y3;reflection(x1,y1,x2,y2,x3,y3);break;}

case 5://shearing{cout<<"Enter coordinates of triangle :";cin>>x1>>y1>>x2>>y2>>x3>>y3;shearing(x1,y1,x2,y2,x3,y3);break;}

default:break;

} }while(choice!=0);getch();}