Bresenham画直线算法

来源:本站
导读:目前正在解读《Bresenham画直线算法》的相关信息,《Bresenham画直线算法》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《Bresenham画直线算法》的详细说明。
简介:本文是关于Bresenham画直线算法。

Bresenham画线算法一个很经典的算法,但是搜遍了互联网,几乎没有可用并满意的代码。以下内容部分来自于《32位单片机C语言编程 基于PIC32》,有所改动,代码实现已经非常的精简了。原代码为C语言实现,但是为了测试我改成javascript,这样就可以很容易的在浏览器里查看结果。本代码经过简单修改,就可以还原为C语言版本。

1962年,工作在IBM公司圣何塞开发实验室的Jack E. Bresenham发明了一个大量使用整数算数运算的画线算法。直到今天这个算法仍然被认为是所有计算机图形程序的基础。该方法基于3个优化“小技巧”:

(1). 将绘画方向简化成一个个别情况(从左到右)。

(2). 将直线的斜率简化成一个个别情况,即水平距离最大。

(3). 将等式两端的表达式都乘以水平距离(deltax)来获得整数值。

这样得到的画线代码非常紧凑而高效;以下是实现这个算法的javascript代码:

function drawline(x0, y0, x1, y1){

//以下这些变量全部为整数类型。

var steep, t;

var deltax, deltay, error;

var x, y;

var ystep;

steep = (Math.abs(y1-y0) > Math.abs(x1-x0));

if(steep){

t = x0; x0 = y0; y0 = t;

t = x1; x1 = y1; y1 = t;

}

if (x0 > x1){

t = x0; x0 = x1; x1 = t;

t = y0; y0 = y1; y1 = t;

}

deltax = x1 - x0;

deltay = Math.abs(y1-y0);

error = 0;

y = y0;

if(y0<y1) else="" ystep="1;">

for (x=x0; x < x1; x++){

if (steep) drawdot(y, x); else drawdot(x, y);

error += deltay;

if ((error << 1) >= deltax){

y += ystep;

error -= deltax;

}

}

}

提醒:《Bresenham画直线算法》最后刷新时间 2024-03-14 00:56:45,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《Bresenham画直线算法》该内容的真实性请自行鉴别。