Bresenham高效画线算法
来源:互联网 发布:托克托网络花店 编辑:程序博客网 时间:2024/04/29 00:30
原文地址Bresenham高效画线算法
画线的算法不少,但要作到高速、简单并不容易。斜率相乘法是最简单的方法之一,但计算每个点均要花费不少时间用于乘、除法运算;下面介绍的是Bresenham's高效画线算法,对每个点的坐标计算只要加、减法就能完成。
简化算法用伪Pascal语言描述如下:
procedure DrawLine(x1, y1, x2, y2: Integer);
var
x, y, DeltaX, DeltaY, HalfX, ErrorTerm, i: Integer;
begin
DeltaX := x2 - x1;
DeltaY := y2 - y1;
HalfX := (x2 - x1) shr 1;
ErrorTerm := 0;
x := x1;
y := y1;
for i:=0 to DeltaX do
begin
Plot(X, Y);
Inc(x);
ErrorTerm := ErrorTerm + DeltaY;
if ErrorTerm>HalfX then
begin
ErrorTerm := ErrorTerm - DeltaX;
Inc(y);
end;
end;
end;
为方便阅读,上述程序作了简化。实际程序应略作修正,以分别处理DeltaX与DeltaY比较大小, 必要时交换起始、结束点等。
修正后的的伪Pascal算法如下:
procedure DrawLine(x1, y1, x2, y2: Integer);
var
x, y, DeltaX, DeltaY, HalfCount, ErrorTerm, i, Flag: Integer;
begin
DeltaX := x2 - x1;
DeltaY := y2 - y1;
if Abs(DeltaY)<Abs(DeltaX) then
begin
if DeltaX<0 then
begin
i := x1; x1 := x2; x2 := i;
i := y1; y1 := y2; y2 := i;
DeltaX := x2 - x1;
DeltaY := y2 - y1;
end;
if DeltaY<0 then Flag := -1
else Flag := 1;
DeltaY := Abs(DeltaY);
HalfCount := DeltaX shr 1;
ErrorTerm := 0;
x := x1;
y := y1;
for i:=0 to DeltaX do
begin
Plot(X, Y);
Inc(x);
ErrorTerm := ErrorTerm + DeltaY;
if ErrorTerm>HalfCount then
begin
ErrorTerm := ErrorTerm - DeltaX;
y := y + Flag;
end;
end;
end
else
begin
if DeltaY<0 then
begin
i := x1; x1 := x2; x2 := i;
i := y1; y1 := y2; y2 := i;
DeltaX := x2 - x1;
DeltaY := y2 - y1;
end;
if DeltaX<0 then Flag := -1
else Flag := 1;
DeltaX := Abs(DeltaX);
HalfCount := DeltaY shr 1;
ErrorTerm := 0;
x := x1;
y := y1;
for i:=0 to DeltaY do
begin
Plot(X, Y);
Inc(y);
ErrorTerm := ErrorTerm + DeltaX;
if ErrorTerm>HalfCount then
begin
ErrorTerm := ErrorTerm - DeltaY;
x := x + Flag;
end;
end;
end;
end;
- Bresenham高效画线算法
- Bresenham高效画线算法
- Bresenham高效画线算法
- 画线算法-Bresenham算法
- Bresenham 画线算法
- Bresenham 画线算法
- Bresenham 画线算法
- Bresenham 画线算法
- Bresenham画线算法
- Bresenham 画线算法
- bresenham 画线算法
- Bresenham画线算法
- Bresenham画线算法
- 中点bresenham算法画线
- Bresenham画线算法(原创)
- Bresenham画线算法(计算机图形学)
- 【OpenGL】用Bresenham算法画线
- 画线算法 中点画线 Bresenham DDA
- 字符替换
- 十二章 类————static
- 让开发自动化: 用 Eclipse 插件提高代码质量
- 取子字符串
- ORACLE SEQUENCE的简单介绍(转自:http://www.dbonline.cn/source/oracle/20031224/PLSQL_oracle%20sequence%20brief%20intro.html)
- Bresenham高效画线算法
- WebBrower的应用和功能扩展(一)
- 比尔·盖茨精辟良言,送给职场新人的10句话
- 用代码向网站提交数据
- eclipse treeViewer的使用 (例程)
- 画直线算法
- 对象和接口(通俗讲解)
- 数据结构与算法分析课后习题第三章(11)
- ibatis 对象关系实现