1.DDA算法
算法实现:
2.Bresenham算法
d是下面这一个像素点到直线的距离
当y递增走一步后,应该重新计算误差项,即d-1,否则d会超出她所表示的范围
//定义Bresenham算法
void CTestView::BresenhamLine(CDC * pDC,CPoint p0,CPoint p1)
{
COLORREF crColor = RGB(0,0,0);
int dx = p1.x - p0.x;
int dy = p1.y - p0.y;
int e = -dx;
for(int x = p0.x, y = p0.y;x < p1.x; x++)
{
pDC->SetPixelV(x,y,crColor);
e += 2 * dx;
if(e >= 0)
{
y++;
e -= 2 * dx;
}
}
}
//之后在ondraw()函数中调用该算法函数即可
3.直线中点算法
该算法在绘制直线段的时候,每次在主位移方向走一步,非主位移方向是否走一步取决于中点误差项di的值
算法实现: