这两种算法都是计算机图形学里的内容。具体的我就不阐述了,本人也只是略微涉猎,在这里实现下两种算法。其实说到底,还是利用GDI函数来实现,只不过算法等实际更多的数学知识。
代码:
void CDDAView::DDALine(int x0, int y0, int x1, int y1, int color)
{
////写入代码////////////
CDC *pDC=GetDC();
int x;
float dx, dy, y, k;
dx = x1-x0;
dy = y1-y0;
k = dy/dx;
y = y0;
for(x=x0; x<=x1; x++)
{
//DrawPixel(x, int(y+0.5), color);
pDC->SetPixel(x,int(y+0.5),color);
y=y+k;
}
ReleaseDC(pDC);
}
void CDDAView::MidpointLine(int x0,int y0,int x1, int y1,int color)
{
CDC *pDC=GetDC();
int a, b, d1, d2, d, x, y;
a=y0-y1;
b=x1-x0;
d=2*a+b;
d1=2*a;
d2=2* (a+b);
x=x0;
y=y0;
//drawpixel(x, y, color);
pDC->SetPixel(x,y,color);
while (x<x1)
{
if (d<0)
{
x++;
y++;
d+=d2;
}
else
{
x++;
d+=d1;
}
pDC->SetPixel(x,y,color);
}
}
在头文件中:
void DDALine(int x0,int y0,int x1,int y1,int color);
void MidpointLine(int x0,int y0,int x1, int y1,int color);
int DDAclr,Midclr;
实现文件.cpp中的构造函数:
DDALine(50,50,100,100,DDAclr);
MidpointLine(150,150,200,200,Midclr);