SLIDE 12 The Algorithm
Inefficient version as first attempt: always computes F(M) = d = xm2 + ym2 - R2
def drawCircle(R, c): xp, yp = 0, R xm, ym = 1, R-0.5 circlePoints(xp, yp, c) while x > y: d = xm2 + ym2 - R2 # F(M) if d < 0: # going E xp, yp = xp+1, yp xm, ym = xm+1, ym else: # going SE xp, yp = xp+1, yp+1 xm, ym = xm+1, ym+1 circlePoints(x, y, c) def drawCircle(R, c): xp, yp = 0, R xm, ym = 1, R-0.5 d = 5/4 – R # F(M0) circlePoints(xp, yp, c) while x > y: d = xm2 + ym2 - R2 # F(M) if d < 0: # going E d += 2*xm + 1 xp, yp = xp+1, yp xm, ym = xm+1, ym else: # going SE d = 2*xm – 2*ym + 2 xp, yp = xp+1, yp+1 xm, ym = xm+1, ym+1 circlePoints(x, y, c)
Better version: incrementally updates F(M)