用C实现Bresenham算法生成直线和圆的程序(要求具体步骤有必要解述)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用C实现Bresenham算法生成直线和圆的程序(要求具体步骤有必要解述)相关的知识,希望对你有一定的参考价值。

用C语言实现Bresenham算法生成直线和圆的程序
(要求具体步骤有必要解述)
200分重赏

Bresenham算法生成直线
假定直线从(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.html
http://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算法的优缺点以及比较.

直线光栅化-Bresenham算法

应用霍夫变换方法,用matlab语言编写相应的程序

斜率为-5/4的直线怎么画

用C++如何实现bresenham画线算法?计算机图形学上面有个drawpixel的函数。不知道怎么用。

直线的中点Bresenham算法的实现