Bresenham Algo

También podría gustarte

Está en la página 1de 4

#include<stdio.h> #include<graphics.h> #include<stdlib.h> #include<conio.h> #define ROUND (a) ((int)(a+0.

5)) //line diagram void lineBres(int xa,int ya,int ya,int yb) { int dx=abs(xa-xb), dy=abs(ya-yb), twoDy=2*dy, twoDyDx=2*(dy-dx), p=2*(dy-dx), x,y,xEnd; /* determine which point to use as start, which as end */ if(xa>xb) { x=xb; y=yb; xEnd=xa; } else { x=xa; y=ya; xEnd=xb; } putpixel(x,y,15); while(x>xEnd) { x++; if(p<0) p+=twoDy; else { y++; p+=twoDyDx; } putpixel(x,y,15); } } void CircleMidpoint(int xcenter,int ycenter,int radius); { int x=0; int y=radius; int p=1-radius; void CirclePlotPoints(int,int,int,int); CirclePlotPoints(xcenter,ycenter,x,y); while(x<y) { x++; if(p<0) p+=2*x+1; else { y--; p+=2*(x-y)+1; } CirclePlotPoints(xcenter,ycenter,x,y); }

} void CirclePlotPoints(int xcenter,int ycenter,int x,int y); { putpixel(xcenter+x,ycenter+y,WHITE); putpixel(xcenter-x,ycenter+y,WHITE); putpixel(xcenter-x,ycenter-y,WHITE); putpixel(xcenter-x,ycenter-x,WHITE); putpixel(xcenter+y,ycenter+x,WHITE); putpixel(xcenter-y,ycenter-x,WHITE); putpixel(xcenter-y,ycenter+x,WHITE); putpixel(xcenter-y,ycenter-y,WHITE); } void ellipsemidpoint(int xcenter,int ycenter,int rx,int ry) { int rx2=rx*rx; int ry2=ry*ry; int tworx2=2*rx2; int ry2=2*ry2; int x=0,y=ry,px=0,p; int py=twox2*y; void ellipseplotpoints(int,int,int,int); ellipseplotpoints(xcenter,ycenter,x,y); p=ROUND(ry2-(rx2*ry)+(0.25*rx2)); while(px<py) { x++; px+=twory2; if(p<0) p+=ry2+px; else { y--; py=tworx2; p+=ry2+px-py; } ellipseplotpoints(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=tworx2; if(p>0) p+=rx2-py; else { x++; px+=twory2; p+=rx2-py+px; } eliipseplotpoints(xcenter,ycenter,x,y); } } void ellipseplotpoints(int xcenter,int ycenter,int x,int y) { putpixel(xcenter+x,ycenter+y,5); putpixel(xcenter-x,ycenter+y,5);

putpixel(xcenter+x,ycenter-y,5); putpixel(xcenter-x,ycenter-y,5); } void main() { int ch,c; co: clrscr(); printf("\n\t\tBRESENHAMBDRA WINGS\n"); printf("\n\t\t1-Line\n2-Circle drawing\n3-ellipse drawing\n4-Exit"); print("Enter your choice"); scanf("%d",&ch); int gdriver=DETECT,gmode; initgraph(&gdriver,&gmode," "); switch(ch); { case 1: int x1,x2,y1,y2; printf("Enter the starting coordinates"); scanf("%d%d",&x1,&y1); printf("Enter the ending coordinates"); scanf("%d%d",&x2,&y2); LineBres(x1,y1,x2,y2); getch(); printf("\n\n\n\n\n\n\nDo u continue (1-yes,0-no):"); scanf("%d",&c); if(c==1) goto co; break; case 2: int xc1,yc1,r; printf("Enter the centere coordinates:"); scanf("%d%d",&xc1,&yc1); printf("Enter the radius"); scanf("%d",&r); circleMidPoint(xc1,yc1,r); getch(); printf("\n\n\n\n\n\n\nDo u continue (1-yes,0-no):"); scanf("%d",&c); if(c==1) goto co; break; case 3: intxc,yc,rx,ry; printf("Enter the xcenter &ycenter coordinates:"); scanf("%d%d",&xc,&yc); printf("Enter the radius(Rx,Ry)"); scanf("%d%d",&rx,&ry); ellipseMidPoint(xc1,yc1,r); getch(); printf("\n\n\n\n\n\n\nDo u continue (1-yes,0-no):"); scanf("%d",&c); if(c==1) goto co; break; case 4: break; } }

También podría gustarte