圆形的生成
- 圆形的扫描转换
- 中点画圆
- Bresenham画圆
圆形的扫描转换
在屏幕像素点阵中确定一组最佳逼近于圆的像素点,并用指定的颜色显示出来。
由于圆具有对称性,在进行扫描转换时,只需迭代生成八分之一圆的最佳像素逼近点,圆的其他部分通过简单的坐标对称就可以直接得到。
中点画圆
void MIDPOINT_Circle(CDC *pDc,CPoint cPt ,int R,COLORREF crColor)
{int x,y,d;x=0;y=R;d=5-4*R;pDc->SetPixel(cPt.x+x,cPt.y+y,crColor);pDc->SetPixel(cPt.x+x,cPt.y-y,crColor);pDc->SetPixel(cPt.x+y,cPt.y+x,crColor);pDc->SetPixel(cPt.x-y,cPt.y+x,crColor);while(x<=y){if (d>=0){x+=1;y-=1;d+=8*(x-y)+20;}else{x+=1;d+=8*x+12;}pDc->SetPixel(cPt.x+x,cPt.y+y,crColor);pDc->SetPixel(cPt.x+x,cPt.y-y,crColor);pDc->SetPixel(cPt.x-x,cPt.y+y,crColor);pDc->SetPixel(cPt.x-x,cPt.y-y,crColor);pDc->SetPixel(cPt.x+y,cPt.y+x,crColor);pDc->SetPixel(cPt.x-y,cPt.y+x,crColor);pDc->SetPixel(cPt.x+y,cPt.y-x,crColor);pDc->SetPixel(cPt.x-y,cPt.y-x,crColor);}}
Bresenham画圆
void Bresenham_Circle(CDC *pDc,CPoint cPt ,int R,COLORREF crColor)
{int x,y,p;x=0;y=R;p=3-2*R;pDc->SetPixel(cPt.x+x,cPt.y+y,crColor);pDc->SetPixel(cPt.x+x,cPt.y-y,crColor);pDc->SetPixel(cPt.x+y,cPt.y+x,crColor);pDc->SetPixel(cPt.x-y,cPt.y+x,crColor);while(x<=y){if (p>=0){x+=1;y-=1;p+=4*(x-y)+10;}else{x+=1;p+=4*x+6;}pDc->SetPixel(cPt.x+x,cPt.y+y,crColor);pDc->SetPixel(cPt.x+x,cPt.y-y,crColor);pDc->SetPixel(cPt.x-x,cPt.y+y,crColor);pDc->SetPixel(cPt.x-x,cPt.y-y,crColor);pDc->SetPixel(cPt.x+y,cPt.y+x,crColor);pDc->SetPixel(cPt.x-y,cPt.y+x,crColor);pDc->SetPixel(cPt.x+y,cPt.y-x,crColor);pDc->SetPixel(cPt.x-y,cPt.y-x,crColor);}
}
结果显示