void DDA_line(CDC *pDC, int x0, int y0, int x1, int y1, long color)
{
float kx = x1-x0, ky = y1-y0;
float dx = abs(kx); // 直线x方向分量
float dy = abs(ky); // 直线y方向分量
float x = x0 + dx; // 直线上的点
float y = y0 + dy;
float stepx = kx > 0 ? 1 : -1; // gx的步进
float stepy = ky > 0 ? 1 : -1;
int gx = (int)x0, gy = (int)y0; // 方格的坐标
while(true)
{
if(x < y)
{
x += dx;
gy += stepy;
if(ky < 0)
{
if(gy < y1)
break;
}
else
{
if(gy > y1)
break;
}
pDC->SetPixel(gx, gy, color);
}
else if(y < x)
{
y += dy;
gx += stepx;
if(kx < 0)
{
if(gx < x1)
break;
}
else
{
if(gx > x1)
break;
}
pDC->SetPixel(gx, gy, color);
}
else
{
x += dx;
y += dy;
gx += stepx;
gy += stepy;
if(kx < 0)
{
if(gx < x1)
break;
}
else
{
if(gx > x1)
break;
}
if(ky < 0)
{
if(gy < y1)
break;
}
else
{
if(gy > y1)
break;
}
pDC->SetPixel(gx, gy, color);
}
}
}
void CCircleView::OnDraw(CDC* pDC)
{
CLineDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
DDA_line(pDC, 50, 50, 300, 150, RGB(255, 0, 0));
DDA_line(pDC, 50, 50, 150, 300, RGB(0, 255, 0));
DDA_line(pDC, 400, 400, 50, 50, RGB(0, 0, 255));
DDA_line(pDC, 300, 150, 150, 300, RGB(255, 255, 0));
// TODO: add draw code for native data here
}