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; } } } } }