[求助] 用C语言如何实现 (用中点算法和Bresenham算法) 画圆.-->雨中飞燕转移
用C语言如何实现 (用中点算法和Bresenham算法) 画圆.回复:(海哑)[求助] 用C语言如何实现 (用中点算...
<P>#include<stdio.h><BR>#include<graphics.h><BR>void MidPointCircle(int r,int color);<BR>void CirclePoints(int x,int y,int color);<BR>void main()<BR>{<BR> int gdriver=DETECT, gmode;</P><P> initgraph(&gdriver, &gmode," ");<BR> setbkcolor(BLACK);<BR> MidPointCircle(100,BLUE); /*下次画圆半径大点,你给的半径真夸张*/<BR> getch();<BR> closegraph();<BR>}</P>
<P>void MidPointCircle(int r,int color)<BR>{<BR> int x,y;<BR> float d;</P>
<P> x=0;<BR> y=r;<BR> d=1.25-r;<BR> CirclePoints(x,y,color);<BR> while(x<y)<BR> {<BR> if(d<0)<BR> d+=2*x+3;<BR> else<BR> {<BR> d+=2*(x-y)+5;<BR> y--;<BR> }<BR> x++;<BR> CirclePoints(x,y,color); /*重点是这里*/<BR> }<BR>}</P>
<P>void CirclePoints(int x,int y,int color) /*圆心为(320,240)*/<BR>{<BR> putpixel(320+x,240+y,color);<BR> putpixel(320+y,240+x,color);<BR> putpixel(320-x,240+y,color);<BR> putpixel(320+y,240-x,color);<BR> putpixel(320+x,240-y,color);<BR> putpixel(320-y,240+x,color);<BR> putpixel(320-x,240-y,color);<BR> putpixel(320-y,240-x,color);<BR>}<BR></P> 中点算法:<BR>void MidpointLine(int x0,int y0,int x1,int y1,int color)<BR>{<BR> int x,y,mid,dx,dy,d_up,d_down;<BR> if(x0>x1)<BR> {<BR> x=x0;<BR> x0=x1;<BR> x1=x;<BR> y=y0;<BR> y0=y1;<BR> y1=y;<BR> }<BR> dy=y1-y0;dx=x1-x0;<BR> mid=dx-2*dy;<BR> d_up=2*dx-2*dy;d_down=-2*dy;<BR> x=x0;y=y0;<BR> while(x<=x1)<BR> {<BR> putpixel(x,y,color);<BR> x++;<BR> if(mid<0)<BR> {<BR> y++;<BR> mid=mid+d_up;<BR> }<BR> else<BR> mid=mid+d_down;<BR> }<BR> return ;<BR>}<BR> <P>数值微分法:<BR>int DDALine (int x0,int y0,int x1,int y1,int color)<BR>{<BR> int coordinate;<BR> float dx=x1-x0/*X方向的增量*/,<BR> dy=y1-y0/*Y方向的增量*/;<BR> float eXY;<BR> float coorXY;<BR> if(dx==0) /*X方向的增量为0*/<BR> {<BR> coorXY=x0;<BR> if(dy>=0) /*Y方向的增量为正方向*/<BR> {<BR> for(coordinate=y0;coordinate<=y1;coordinate++)<BR> putpixel(coorXY,coordinate,color);<BR> }<BR> else /*Y方向的增量为负方向*/<BR> {<BR> for(coordinate=y0;coordinate>=y1;coordinate--)<BR> putpixel(coorXY,coordinate,color);<BR> }<BR> }<BR> else if(dy/dx<=1 && dy/dx>=-1) /*|dy/dx|<=1*/<BR> {<BR> /*X方向的增量为+1/-1,Y方向随之增量为+eXY/-eXY*/</P>
<P> coorXY=y0; /*Y方向的初始值为y0*/<BR> if(dx>=0)<BR> {<BR> eXY=dy/dx; /*当dy>=0时,eXY=dy/dx>=0,<BR> 当dy<0 时,eXY=dy/dx<0*/<BR> for(coordinate=x0;coordinate<=x1;coordinate++)<BR> {<BR> putpixel(coordinate,(int)(coorXY),color);<BR> coorXY+=eXY; /*Y方向增量为eXY*/<BR> }<BR> }<BR> else<BR> {<BR> eXY=-dy/dx; /*当dy>=0时,eXY=-dy/dx>=0,<BR> 当dy<0 时,eXY=-dy/dx<0*/<BR> for(coordinate=x0;coordinate>=x1;coordinate--)<BR> {<BR> putpixel(coordinate,(int)(coorXY),color);<BR> coorXY+=eXY; /*Y方向增量为eXY*/<BR> }<BR> }<BR> }<BR> else /*|dy/dx|>1*/<BR> {<BR> coorXY=x0; /*X方向的初始值为y0*/<BR> if(dy>=0)<BR> {<BR> eXY=dx/dy; /*当dx>=0时,eXY=dx/dy>=0,<BR> 当dx< 0时,eXY=dx/dy<0*/<BR> for(coordinate=y0;coordinate<=y1;coordinate++)<BR> {<BR> putpixel((int)(coorXY),coordinate,color);<BR> coorXY+=eXY; /*X方向增量为eXY*/<BR> }<BR> }<BR> else<BR> {<BR> eXY=-dx/dy; /*当dx>=0时,eXY=-dx/dy>=0,<BR> 当dx< 0时,eXY=-dx/dy<0*/<BR> for(coordinate=y0;coordinate>=y1;coordinate--)<BR> {<BR> putpixel((int)(coorXY),coordinate,color);<BR> coorXY+=eXY; /*X方向增量为eXY*/<BR> }<BR> }<BR> }<BR> return 0; /*返回值为0*/<BR>}</P>
页:
[1]
