Bresenham画线算法

来源:百度知道 编辑:UC知道 时间:2024/04/30 00:48:28
求一个能运行的Bresenham画线算法,如果能用鼠标画就更好了,最好是用C++写的。采纳后会再送上100分!
要是有源文件就好了,我对这个不是很清楚呀!

void Bresenhamline(int x1,int y1,int x2,int y2,int c,CDC* pDC)//画直线
{
int x,y,dx,dy,p,const1,const2,inc,tmp;
dx=x2-x1;
dy=y2-y1;
if(dx*dy>=0)//准备x或y的单位递变值
inc=1;
else
inc=-1;
if(abs(dx)>=abs(dy))
{
if(dx<0)
{
tmp=x1;//将2a、3a象限方向的直线变换到1a、4a方向
x1=x2;
x2=tmp;
tmp=y1;
y1=y2;
y2=tmp;
dx=-dx;
dy=-dy;
}
if(dy<0)
dy=-dy;
p=2*dy-dx;
const1=2*dy;
const2=2*(dy-dx);
x=x1;
y=y1;
pDC->SetPixel(x,y,c);
while(x<x2)
{
x++;
if(p<0)
p+=const1;
else
{
y+=inc;
p+=const2;
}
pDC->SetPixel(x,y,c);
}
}
else
{
if(dy<0)
{
tmp=x1;//将3b、4b象限方向的直线变换到2b、1b方向
x1=x2;
x2=tmp;
tmp=y1;
y1=y2;
y2=tmp;
dx=-dx;
dy=-dy;
}
if(dx<0)
dx=-dx;
p=2*dx-dy; <