用C实现Bresenham算法生成直线和圆的程序(要求具体步骤有必要解述)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用C实现Bresenham算法生成直线和圆的程序(要求具体步骤有必要解述)相关的知识,希望对你有一定的参考价值。
用C语言实现Bresenham算法生成直线和圆的程序
(要求具体步骤有必要解述)
200分重赏
假定直线从(x1,y1)到(x2,y2),
令dx=x2-x1,dy=y2-y1
不妨设(dx,dy)在第一象限,并且直线的斜率不大于1
画线过程中有三个循环变量
x,y,d
初值
x=x1,y=y1,d=2*dy-dx
循环,直到x==x2为止
如果d>=0,y++,d+=2*(dy-dx)
如果d<0 ,x++,d+=2*dy
如果(dx,dy)不在第一象限,要做变换,即先把第一象限的画出来
如果斜率大于1,x,y交换
非常简单的,很容易实现
圆的算法:
int Bres(int x0,int y0,double r,int color)
int x,y,d;
x=0;
y=(int)r;
d=(int)(3-2*r);
while(x<y)
cirpot(x0,y0,x,y,color);
if(d<0)
d+=4*x+6;
else
d+=4*(x-y)+10;
y--;
x++;
if(x==y)
cirpot(x0,y0,x,y,color);
return(0);
int cirpot(int x0,int y0,int x,int y,int color)
setcolor(color);
putxicl((x0+x),(y0+y));
putxicl((x0+y),(y0+x));
putxicl((x0+y),(y0-x));
putxicl((x0+x),(y0-y));
putxicl((x0-x),(y0-y));
putxicl((x0-y),(y0-x));
putxicl((x0-y),(y0+x));
putxicl((x0-x),(y0+y));
setcolor(color);
return(0);
这是圆的算法,你若要整个程序,把你的电邮给我,我给你发过去、
运行环境是Turboc 2.0
int Bresline(int x1,inty1,int x2,int y2,int color)
int color,itag;
int dx,dy,tx,ty,inc1,inc2,d,curx,cury;
setcolor(color);
putxicl(x1,y1);
if(x1==x2&&y1==y2)
setcolor(color);
return(1);
itag=0;
dx=abs(x2-x1);
dy=abs(y2-y1);
if(dx<dy)
itag=1;]
iswap(&x1,&y1);
iswap(&x2,&y2);
iswap(&dx,&dy);
tx=(x2-x1)>0? 1:-1;
ty=(y2-y1)>0? 1:-1;
curx=x1;
cury=y1;
inc1=2*dy;
inc2=2*(dy-dx);
d=inc1-dx;
while(curx!x2)
if(d<0)
d+=inc1;
else
cury+=ty;
d+=inc2;
if(itag)
setpixel(cury,curx);
else
setpixel(curx,cury);
curxd+=tx;
setcolor(color);
return(0);
iswap(int*a,int*b)
int tmp;
tmp=*a;
*a=*b;
*b=tmp;
这是直线的算法:和圆的差不多,你可以参考一下:)
参考资料:http://topic.csdn.net/t/20031229/09/2612742.html
参考技术A http://topic.csdn.net/t/20031229/09/2612742.htmlhttp://www.baidu.com/s?wd=bresenham&lm=0&si=&rn=10&ie=gb2312&ct=0&cl=3&f=1&rsp=8
http://www.baidu.com/s?wd=bresenham%D6%B1%CF%DF%C9%FA%B3%C9&lm=0&si=&rn=10&ie=gb2312&ct=0&cl=3&f=1&rsp=0
http://www.baidu.com/s?wd=bresenham%C9%FA%B3%C9%D4%B2&lm=0&si=&rn=10&ie=gb2312&ct=0&cl=3&f=1&rsp=1
最下面的相关搜索
http://www.baidu.com/s?tn=baidu&ie=gb2312&bs=Bresenham%CB%E3%B7%A8%C9%FA%B3%C9%D6%B1%CF%DF%BA%CD%D4%B2%B5%C4%B3%CC%D0%F2&sr=&z=&cl=3&f=8&wd=Bresenham%C9%FA%B3%C9%D6%B1%CF%DF%BA%CD%D4%B2%B5%C4%B3%CC%D0%F2&ct=0 参考技术B 我也想要答案啊.. 参考技术C 你给我1000分我也不会呀,这么难!
以上是关于用C实现Bresenham算法生成直线和圆的程序(要求具体步骤有必要解述)的主要内容,如果未能解决你的问题,请参考以下文章
求计算机图形学中的直线绘制函数法、DDA算法、中点法和Bresenham算法的优缺点以及比较.