void CDemoView::DDA_line(int x0, int x1, int y0, int y1, CDC *pDC, COLORREF clr)
{
double k;
k = (double)(y1 - y0) / (double)(x1-x0);
double y = y0, x = x0;
for (x = x0; x <= x1; x++)
{
pDC->SetPixel(x,y,clr);
y = y + k;
}
pDC->TextOutW(10, 10, TEXT("DDA算法蓝色输出"));
}
void CMFCdemo1View::MidPoint(int x0, int x1, int y0, int y1, CDC* pDC, COLORREF clr)
{
int x = x0, y = y0, dx = abs(x1 - x0), dy = abs(y1 - y0),
a = y0 - y1, b = x1 - x0, c = y1 - y0;
int d, d1, d2, p, p1, q, q1, i=0, imax;
if (b <= 0 && c > 0 || b >= 0 && c < 0)
{
if (b < 0)
{
x = x1; y = y1; a = -a; b = -b;
}
if (dx >= dy)
{
d = 2 * a - b; d1 = 2 * (a - b); d2 = 2 * a;
p = 1; p1 = -1; q = 1; q1 = 0;
imax = dx;
}
else
{
d = a - 2 * b; d1 = -2 * b; d2 = 2 * (a - b);
p = 0; p1 = -1; q = 1; q1 = -1;
imax = dy;
}
}
else
{
if (b < 0)
{
x = x1; y = y1; a = -a; b = -b;
}
if (dx >= dy)
{
d = 2 * a + b; d1 = 2 * a; d2 = 2 * (a + b);
p = 1; p1 = 0; q = 1; q1 = 1;
imax = dx;
}
else
{
d = a + 2 * b; d1 = 2 * (a + b); d2 = 2 * b;
p = 1; p1 = 1; q = 0; q1 = 1;
imax = dy;
}
}
pDC->SetPixel(x, y, clr);
for (i; i <= imax; i++)
{
if (d > 0)
{
d += d1; x += p; y += p1;
}
else
{
d += d2; x += q; y += q1;
}
pDC->SetPixel(x, y, clr);
}
}
void CMFCdemo1View::Bresenham(int x0, int x1, int y0, int y1, CDC* pDC, COLORREF clr)
{
int x = x0, y = x0, dx = x1 - x0, dy = y1 - y0, e;
if (dx >= 0 && dy < 0 || dx <= 0 && dy>0)
{
if (dx < 0)
{
x = x1; y = y1; dx = -dx; dy = -dy;
}
if (abs(dx) >= abs(dy))
{
e = dx;
for (int i = 0; i <= abs(dx); i++)
{
pDC->SetPixel(x, y, clr);
e += 2 * dy; x++;
if (e < 0)
{
e += 2 * dx; y--;
}
}
}
else
{
e = -dy;
for (int i = 0; i <= abs(dy); i++)
{
pDC->SetPixel(x, y, clr);
e -= 2 * dx; y--;
if (e < 0)
{
e - = 2 * dy; x++;
}
}
}
}
}