原理:(摘自百度百科)
Bresenham算法是计算机图形学领域使用最广泛的直线扫描转换方法。
其原理是:
过各行、各列像素中心构造一组虚拟网格线,按直线从起点到终点的
顺序计算直线各垂直网格线的交点,然后确定该列像素中与此交点最近
的像素。
该算法的优点在于可以采用增量计算,使得对于每一列,只要检查一个误差项
的符号,就可以确定该列所求的像素。以下为PASCAL程序实现
program b_line;
uses crt,graph;
var
GD,GM:INTEGER;
procedure bresenham(x1,y1,x2,y2:integer);
var
i,dx,dy,e:integer;
x,y:integer;
procedure swap(var x,y:integer);
var
temp:integer;
begin
temp :=x;
x:=y;
y:=temp;
end;
begin
setbkcolor(0);
if abs(x1-x2)>abs(y1-y2) then
begin
if x1>x2 then
begin
swap(x1,x2); swap(y1,y2);
end;
dx:=x2-x1; dy:=y2-y1;
e:=2*dy-dx;
for i:=1 to dx do
begin
putpixel(x1,y1,white);
if e>0 then
begin
inc(y1);
e:=e-dx-dx;
end;
e:=e+dx+dx;
x1:=x1+1;
end;
end
else
begin
if y1>y2 then
begin
swap(y1,y2); swap(x1,x2);
end;
dx :=x2-x1;
dy:=y2-y1;
e:=dx+dx-dy;
for i:=1 to dy do
begin
putpixel(x1,y1,1);
if e>0 then
begin
inc(x1);
e:=e-dy-dy;
end;
e:=e+dy+dy;
y1:=y1+1;
end;
end;
end;
begin
GD :=DETECT;
INITGRAPH(GD,GM,'D:\TP\BGI');
BRESENHAM(100,50,50,100);
Repeat until Keypressed;
closegraph;
END.
另附turbo c程序
#include <graphics.h>
/***********************Define*********************************/ void grahic_mode_close()/*退出图形模式*/ void bresenham_line(int x1,int y1,int x2,int y2,int color)/*Bresenham算法绘制直线*/
|