圆生成算法(中点画圆、Bresenham画圆)
2013-07-22 15:32
176 查看
#include <graphics.h> #include <math.h> void MidPointCircle(int r, int color); void CirclePoints(int x,int y,int color); void BresenhamCircle(int xc,int yc,int r,int color); void plot_cicle_point(int xc,int yc,int x,int y,int color); main() { int gdriver=DETECT,gmode; initgraph(&gdriver,&gmode," "); cleardevice(); setbkcolor(2); MidPointCircle(100,4); getch(); cleardevice(); BresenhamCircle(100,100,50,5); getch(); closegraph(); } void MidPointCircle(int r,int color) { int x,y; float d; x=0;y=r; d=1.25-r; CirclePoints(x,y,color); while(x<=y) { if(d<0) d+=2*x+3; else { d+=2*(x-y)+5; y--; } x++; CirclePoints(x,y,color); } } void CirclePoints(int x,int y,int color) { putpixel(x,y,color); putpixel(y,x,color); putpixel(-x,y,color); putpixel(y,-x,color); putpixel(x,-y,color); putpixel(-y,x,color); putpixel(-x,-y,color); putpixel(-y,-x,color); } void plot_circle_point(int xc,int yc,int x,int y,int color) { putpixel(xc+x,yc+y,color); putpixel(xc-x,yc+y,color); putpixel(xc+x,yc-y,color); putpixel(xc-x,yc-y,color); putpixel(xc+y,yc+x,color); putpixel(xc-y,yc+x,color); putpixel(xc+y,yc-x,color); putpixel(xc-y,yc-x,color); } void BresenhamCircle(int xc,int yc,int r,int color) { int x,y,d; x=0;y=r; d=3-2*r; while(x<y) { plot_circle_point(xc,yc,x,y,color); if(d<0) d=d+4*x+6; else { d=d+4*(x-y)+10; y--; } x++; } if(x==y) plot_circle_point(xc,yc,x,y,color); }
相关文章推荐
- 计算机图形学 - 圆的中点生成算法验证
- 直线生成算法的实现:分别利用DDA算法、中点Bresenham算法和改进的Bresenham算法扫描转换直线段P1P2
- 计算机图形学 – 椭圆的中点生成算法
- 圆生成算法---中点画圆法
- DDA,中点算法生成直线
- 【Computer Graphics】2.直线生成算法(中点画线 算法)
- 椭圆生成算法---中点画椭圆法
- 椭圆的中点生成算法
- 直线生成算法---中点画线法
- 【OpenGL】中点圆、椭圆生成算法
- 自己用python写的螺旋矩阵生成算法
- 恶魔的指纹---49幅由算法生成的七芒星图像
- 第十三周 项目1-验证算法-验证最小生成树的普利姆算法
- 小议ID生成算法
- 火火火---12幅算法生成火的图像
- 初级->图算法->最小生成树 poj 2485 Highways
- 图形学_椭圆扫描转换_中点椭圆算法
- 太阳崇拜---64幅由算法生成的八芒星图像
- 朱刘算法---有向图的最小生成树
- 九尾之火---算法生成的动画图像