Rasterize a small circle by computing one octant and reflecting each point by symmetry.

midpoint-circle The midpoint circle method tests which neighboring pixel stays closer to the ideal circle, then uses symmetry to set the matching pixels.

Example

Compute one circle octant and reflect each point by symmetry. This is exact integer rasterization; real rendering anti-aliases these edges.

highlighted = computed this step

Step 1 — Set up

Start with the circle center and decision value.

C=(5,5), r=4, D=−3C=(5,5),\ r=4,\ D=-3
Midpoint circle pixelsCircle pixels are reflected by symmetry from each octant point.012345678910012345678910

Step 2 — Octant point A

Reflect this octant point by symmetry.

xyDmove04−3Eoctant (0,4)\begin{array}{c|c|c|c}x&y&D&\text{move}\\0&4&-3&\text{E}\end{array}\quad \text{octant }\hlmath{(0,4)}
Midpoint circle pixelsCircle pixels are reflected by symmetry from each octant point.012345678910012345678910

Step 3 — Octant point B

Reflect this octant point by symmetry.

xyDmove140SEoctant (1,4)\begin{array}{c|c|c|c}x&y&D&\text{move}\\1&4&0&\text{SE}\end{array}\quad \text{octant }\hlmath{(1,4)}
Midpoint circle pixelsCircle pixels are reflected by symmetry from each octant point.012345678910012345678910

Step 4 — Octant point C

Reflect this octant point by symmetry.

xyDmove23−1Eoctant (2,3)\begin{array}{c|c|c|c}x&y&D&\text{move}\\2&3&-1&\text{E}\end{array}\quad \text{octant }\hlmath{(2,3)}
Midpoint circle pixelsCircle pixels are reflected by symmetry from each octant point.012345678910012345678910

Step 5 — Octant point D

Reflect this octant point by symmetry.

xyDmove336SEoctant (3,3)\begin{array}{c|c|c|c}x&y&D&\text{move}\\3&3&6&\text{SE}\end{array}\quad \text{octant }\hlmath{(3,3)}
Midpoint circle pixelsCircle pixels are reflected by symmetry from each octant point.012345678910012345678910

Step 6 — Result

The symmetric circle pixel set is complete.

circle pixels complete\text{circle pixels complete}
Midpoint circle pixelsCircle pixels are reflected by symmetry from each octant point.012345678910012345678910