bresenham直线算法与画圆算法

bresenham直线算法与画圆算法

ID:15390460

大小:179.50 KB

页数:8页

时间:2018-08-03

bresenham直线算法与画圆算法_第1页
bresenham直线算法与画圆算法_第2页
bresenham直线算法与画圆算法_第3页
bresenham直线算法与画圆算法_第4页
bresenham直线算法与画圆算法_第5页
资源描述:

《bresenham直线算法与画圆算法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Bresenham直线算法与画圆算法文章分类:Java编程计算机是如何画直线的?简单来说,如下图所示,真实的直线是连续的,但我们的计算机显示的精度有限,不可能真正显示连续的直线,于是我们用一系列离散化后的点(像素)来近似表现这条直线。    (上图来自于互联网络,《计算机图形学的概念与方法》柳朝阳,郑州大学数学系)  接下来的问题就是如何尽可能高效地找到这些离散的点,Bresenham直线算法就是一个非常不错的算法。  Bresenham直线算法是用来描绘由两点所决定的直线的算法,它会算出一条线段在n维光栅上最接近的点。这个算法只会用到较为快速的

2、整数加法、减法和位元移位,常用于绘制电脑画面中的直线。是计算机图形学中最先发展出来的算法。  (引自wiki百科布雷森漢姆直線演算法)  这个算法的流程图如下:   可以看到,算法其实只考虑了斜率在0~1之间的直线,也就是与x轴夹角在0度到45度的直线。只要解决了这类直线的画法,其它角度的直线的绘制全部可以通过简单的坐标变换来实现。  下面是一个C语言实现版本。Java代码 1.view sourceprint?  2. // 交换整数 a 、b 的值    3.  4.inline void swap_int(int *a, int *b)  

3、 5.{    6.    *a ^= *b;    7.    *b ^= *a;    8.    *a ^= *b;    1.}    2.  3.// Bresenham's line algorithm    4.  5.void draw_line(IMAGE *img, int x1, int y1, int x2, int y2, unsigned long c)   6.{    7.    // 参数 c 为颜色值    8.    int dx = abs(x2 - x1),    9.        dy = abs(y

4、2 - y1),    10.        yy = 0;    11.  12.    if(dx < dy)   13.    {    14.        yy = 1;    15.        swap_int(&x1, &y1);    16.        swap_int(&x2, &y2);    17.        swap_int(&dx, &dy);    18.    }        19.  20.    int ix = (x2 - x1) > 0 ? 1 : -1,    21.        iy = 

5、(y2 - y1) > 0 ? 1 : -1,    22.        cx = x1,    23.        cy = y1,    24.        n2dy = dy * 2,    25.        n2dydx = (dy - dx) * 2,    26.        d = dy * 2 - dx;        27.  28.// 如果直线与 x 轴的夹角大于45度    29.    if(yy)  30.    {   31.        while(cx != x2)   32.        {  

6、  33.            if(d < 0)   34.            {    35.                d += n2dy;    36.            }   37.            else   38.            {    39.                cy += iy;    40.                d += n2dydx;    41.            }    42.  43.            putpixel(img, cy, cx, c); 

7、   1.  2.            cx += ix;    3.        }    4.    }  5.      6.// 如果直线与 x 轴的夹角小于  度    7.    else   8.    {   9.        while(cx != x2)   10.        {    11.            if(d < 0)  12.            {    13.                d += n2dy;    14.            }  15.            else 

8、  16.            {    17.                cy += iy;    18.           

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。