代码实现:
DDA画线法
void CCGDrawingView::DDAline(int x1, int y1, int x2, int y2, CDC* pDC) {
double dx, dy, e, x, y;
dx = x2 - x1;
dy = y2 - y1;
e = (fabs(dx) > fabs(dy) ? fabs(dx) : fabs(dy));
dx /= e;
dy /= e;
x = x1; y = y1;
for (int i = 0; i <= e; i++) {
pDC->SetPixel((int)(x + 0.5), (int)(y + 0.5), RGB(255, 0, 0));
x += dx;
y += dy;
}
{
}
}
中心点画线法
void CCGDrawingView::MidpointLine(int x1, int y1, int x2, int y2, CDC* pDC) {
int a, b, deltal, deltal2, d, x, y;
a = y1 - y2;
b = x2 - x1;
d = 2 * a*b;
deltal = 2 * a;
deltal2 = 2 * (a + b);
x = x1;
y = y1;
pDC->SetPixel(int(x + 0.5), int(y + 0.5), RGB(0, 255, 0));
while (x<x2)
{
if (d < 0) {
x++;
y++;
d += deltal2;
}
else {
x++;
d += deltal;
}
pDC->SetPixel(int(x + 0.5), int(y + 0.5), RGB(0, 255, 0));
}
}
Bresenham画线法
void CCGDrawingView::BresenhamLine(int x1, int y1, int x2, int y2, CDC* pDC) {
int x, y, dx, dy, p;
x = x1;
y = y1;
dx = x2 - x1;
dy = y2 - y1;
p = 2 * dy - dx;
for ( ;x<=x2; x++)
{
pDC->SetPixel(int(x), int(y), RGB(255, 215,160));
if (p >= 0)
{
y++;
p += 2 * (dy - dx);
}
else {
p += 2 * dy;
}
}
}