How can I draw a filled circle on a grid with the less rectangle as possible?
To get a proper circle, you can use a transformation matrix to transform your cell coordinates into equally spaced cartesian coordinates. In the case of your 50 x 100 pixel cells, your transformation matrix would probably either double the width or halve the height. So something like this:

| 0.5 0.0 |
| 0.0 1.0 |


If you want to draw a circle of radius r at a center point (cx, cy), you could iterate over the cells from (cx - r, cy - r) to (cx + r, cy + r) and test if each one is in the circle, and if so, fill it in, otherwise, don't. Something like this pseudocode:

double rSquared = r * r;
for (int row = cy - r; row &lt; cy + r; row++)
{
    for (int col = cx - r; col &lt; cx + r; col++)
    {
        double x = col * transform[0][0] + row * transform[0][1];
        double y = col * transform[1][0] + row * transform[1][1];
        double distSquared = x * x + y * y;
        if (distSquared &lt;= rSquared)
        {
            // inside the circle, fill in this cell (col, row)
        }
        else
        {
            // outside the circle, don't fill in this cell (col, row)
        }
    }
}


As for drawing rectangles, it's not clear what you're trying to accomplish there. There's no need to use rectangles when drawing a circle.