void Bresenham_Ellipse(CDC *pDC, int ox, int oy, int a, int b)//圆心x,圆心y,横长,纵长 { float d = b*b + a*a*(-b + 0.25); int x = 0, y = b, fx = a*a / sqrt((float)a*a + b*b); while (x != fx) { if (d < 0) d += b*b*(2 * x + 3); else { --y; d += b*b*(2 * x + 3) + a*a*(-2 * y + 2); } ++x; pDC->SetPixel(ox + x, oy + y, RGB(0, 0, 225)); pDC->SetPixel(ox - x, oy + y, RGB(0, 0, 225)); pDC->SetPixel(ox + x, oy - y, RGB(0, 0, 225)); pDC->SetPixel(ox - x, oy - y, RGB(0, 0, 225)); } //中点改为(x+0.5,y-1)所以d = d = b*b*(x + 0.5)*(x + 0.5) + a*a*(y - 1)*(y - 1) - a*a*b*b; while (y > 0) { if (d < 0) { ++x; d += b*b*(2 * x + 2) + a*a*(-2 * y + 3); } else d += a*a*(-2 * y + 3); --y; pDC->SetPixel(ox + x, oy + y, RGB(0, 0, 225)); pDC->SetPixel(ox - x, oy + y, RGB(0, 0, 225)); pDC->SetPixel(ox + x, oy - y, RGB(0, 0, 225)); pDC->SetPixel(ox - x, oy - y, RGB(0, 0, 225)); } }
原文地址:http://blog.csdn.net/xianyun2009/article/details/39012415