中点法画直线:
void MidBresenhamLine(CDC *pDC,int x0,int y0,int x1,int y1,int color){
int dx,dy,d,up,down,x,y;
if(x0>x1){
x=x1;x1=x0;x0=x;
y=y1;y1=y0;y0=y;
}
x=x0;y=y0;
dx=x1-x0;dy=y1-y0;
d=dx-2*dy;
up=2*x-2*y;
down=-2*dy;
while(x<=x1){
pDC->SetPixel(x,y,color);
x++;
if(d<0){
y++;
d+=up;
}
else d+=down;
}
}
void CMy213View::OnButton32772()
{
CDC *pDC;
pDC=this->GetDC();
int x0=50,y0=50,x1=300,y1=300,color=333;
MidBresenhamLine(pDC,x0,y0,x1,y1,color);
this->ReleaseDC(pDC);
// TODO: 在此添加命令处理程序代码
}
八分法画圆:
void CirclePoint(CDC *pDC,int x,int y,int color){
pDC->SetPixel(x+350,y+350,color);
pDC->SetPixel(x+350,-y+350,color);
pDC->SetPixel(-x+350,y+350,color);
pDC->SetPixel(-x+350,-y+350,color);
pDC->SetPixel(y+350,x+350,color);
pDC->SetPixel(-y+350,x+350,color);
pDC->SetPixel(y+350,-x+350,color);
pDC->SetPixel(-y+350,-x+350,color);
}
void MidBresenhamCircle(CDC *pDC,int r,int color){
int x,y,d;
x=0;y=r;d=1-r;
while(x<=y){
CirclePoint(pDC,x,y,color);
if(d<0)d+=2*x+3;
else{
d+=2*(x-y)-5;
y--;
}
x++;
}
}
void CmbView::Onbbb()
{
CDC *pDC;
pDC=this->GetDC();
int r=60,color=333;
MidBresenhamCircle(pDC,r,color);
this->ReleaseDC(pDC);
// TODO: 在此添加命令处理程序代码
}