void BresenhamLine(const QPointF& pt0,
const QPointF& pt1,
std::vector<QPointF> &line)
{
double x=0.0,y=0.0,e=0.0;
double x0=pt0.x();
double y0=pt0.y();
double x1=pt1.x();
double y1=pt1.y();
double dx=x1-x0;
double dy=y1-y0;
if(fabs(dy)<=fabs(dx))
{
if(x1<x0)
{
qSwap(x0,x1);
qSwap(y0,y1);
}
dx=x1-x0;
dy=y1-y0;
if(y0<=y1)
{
e=-dx;
x=x0;
y=y0;
for(int i=0;i<=dx;i++)
{
line.push_back(QPointF(x,y));
x++;
e+=2*dy;
if(e>=0)
{
y++;
e-=2*dx;
}
}
}
else
{
e=dx;
x=x0;
y=y0;
for(int i=0;i<=dx;i++)
{
line.push_back(QPointF(x,y));
x++;
e+=2*dy;
if (e<=0)
{
--y;
e+=2*dx;
}
}
}
}
else
{
if(y1<y0)
{
qSwap(x0,x1);
qSwap(y0,y1);
}
dx=x1-x0;
dy=y1-y0;
if(x0<=x1)
{
e=-dy;
x=x0;
y=y0;
for(int i=0;i<=dy;i++)
{
line.push_back(QPointF(x,y));
y++;
e+=2*dx;
if(e>=0)
{
x++;
e-=2*dy;
}
}
}
else
{
e=dy;
x=x0;
y=y0;
for(int i=0;i<=dy;i++)
{
line.push_back(QPointF(x,y));
y++;
e+=2*dx;
if(e<=0)
{
--x;
e+=2*dy;
}
}
}
}
}