求助! bresenham画椭圆
<P>我编了一个用bresenham算法画椭圆的小程序,结果发现不太好使 那位高手指点一下 谢谢!<BR>程序如下:<BR><BR>#include "stdio.h"<BR>#include <graphics.h><BR>#define closegr closegraph<BR>#include <conio.h><BR>void circlepoint(int j,int k,int pointX,int pointY)<BR>{<BR> putpixel(pointX,pointY,WHITE);<BR> putpixel(j+pointX,k+pointY,RED);<BR> putpixel(-j+pointX,k+pointY,YELLOW);<BR> putpixel(-j+pointX,-k+pointY,GREEN);<BR> putpixel(j+pointX,-k+pointY,BLUE);<BR> }<BR>void Midbresenhamellipse(int a,int b,int aR,int bR )<BR>{<BR> if(aR<bR)<BR> {<BR> int x,y;<BR> float d1,d2;<BR> x=0;<BR> y=bR;<BR> d1=bR*bR+aR*aR*(-bR+0.25);<BR> circlepoint(x,y,a,b);<BR> while(bR*bR*(x+1)<aR*aR*(y-0.5))<BR> {<BR> if(d1<=0)<BR> {<BR> d1+=bR*bR*(2*x+3);<BR> x++;<BR> }<BR> else<BR> {<BR> d1+=bR*bR*(2*x+3)+aR*aR*(-2*y+2);<BR> x++;<BR> y--;<BR> }<BR> circlepoint(x,y,a,b);<BR> }<BR>d2=bR*bR*(x+0.5)*(x+0.5)+aR*aR*(y-1)*(y-1)-aR*aR*bR*bR;<BR> while(y>0)<BR> {<BR> if(d2<=0)<BR> {<BR> d2+=bR*bR*(2*x+2)+aR*aR*(-2*y+3);<BR> x++;<BR> y--;<BR> }<BR> else<BR> {<BR> d2+=aR*aR*(-2*y+3);<BR> y--;<BR> }<BR> circlepoint(x,y,a,b);<BR> }<BR> }<BR> else /*横向放置圆*/<BR> {<BR> int X,Y;<BR> float d3,d4;<BR> X=0;<BR> Y=bR;<BR> d3=0.25*bR*bR+aR*aR*(-2*bR+1);<BR> circlepoint(X,Y,a,b);<BR>while(bR*bR*(X+0.5)>aR*aR*(Y-1))<BR> {<BR> if(d3>=0)<BR> {<BR> d3+=aR*aR*(-2*Y+3);<BR> Y--;<BR> }<BR> else {<BR> d3+=aR*aR*(-2*Y+3)+bR*bR*(2*X+2);<BR> X++;<BR> Y--;<BR> }<BR> circlepoint(X,Y,a,b);<BR> }<BR>d4=bR*bR*(X+1)*(X+1)+aR*aR*(Y-0.5)*(Y-0.5)-aR*aR*bR*bR;<BR> while(Y>=0)<BR> {<BR> if(d4<0)<BR> {<BR> d4+=bR*bR*(2*X+3);<BR> X++;<BR> }<BR> else<BR> {<BR> d4+=bR*bR(2*X+3)+aR*aR(2-2*Y);<BR> X++;<BR> Y--;<BR> }<BR> circlepoint(X,Y,a,b);<BR> }<BR> }<BR> }<BR> int main(void)<BR>{ int j,k,longR,shortR;<BR> int gdriver,gmode;<BR> detectgraph(&gdriver,&gmode);<BR> initgraph(&gdriver,&gmode,"");<BR> printf("\nEnter the center of circle :");<BR> scanf("%d,%d",&j,&k);<BR> printf("Enter long and short radius:");<BR> scanf("%d,%d",&longR,&shortR);<BR> Midbresenhamellipse(j,k,longR,shortR);<BR> getch();<BR> closegr();<BR> return 0;<BR>}</P><P><BR></P>
[align=right][color=#000066][此贴子已经被作者于2007-11-2 12:52:44编辑过][/color][/align]
太有味了<BR>
页:
[1]
