This compares the methods...
Code:
DECLARE SUB Mcirc (x%, y%, r%, c%)
DECLARE SUB Zcirc (x%, y%, radius%, c%)
DECLARE SUB Pcirc (xc%, yc%, radius%, colr%)
SCREEN 12
CLS
timer2 = TIMER + 1
DO: LOOP WHILE TIMER < timer2
secs = 1
'default method
RANDOMIZE 0
timeme = TIMER + secs
DO WHILE timeme > TIMER
CIRCLE (RND * 640, RND * 480), RND * 100, RND * 16
countDeflt = countDeflt + 1
LOOP
CLS
'Mango's method
RANDOMIZE 0
timeme = TIMER + secs
DO WHILE timeme > TIMER
CALL Mcirc(RND * 640, RND * 480, RND * 100, RND * 16)
countMango = countMango + 1
LOOP
CLS
'Zack's method
RANDOMIZE 0
timeme = TIMER + secs
DO WHILE timeme > TIMER
CALL Zcirc(RND * 640, RND * 480, RND * 100, RND * 16)
countZacko = countZacko + 1
LOOP
CLS
'Plasma's method
RANDOMIZE 0
timeme = TIMER + secs
DO WHILE timeme > TIMER
CALL Pcirc(RND * 640, RND * 480, RND * 100, RND * 16)
countPlasm = countPlasm + 1
LOOP
PRINT "default gets"; countDeflt / secs; "circles/sec"
PRINT "Mango gets"; countMango / secs; "circles/sec"
PRINT "Zack gets"; countZacko / secs; "circles/sec"
PRINT "Plasma gets"; countPlasm / secs; "circles/sec"
END
DEFINT A-Z
SUB Mcirc (x, y, r, c)
a = .707 * r
WHILE a
b = SQR((r * r) - (a * a))
PSET (x + a, y + b), c
PSET (x - a, y + b), c
PSET (x + a, y - b), c
PSET (x - a, y - b), c
PSET (x + b, y - a), c
PSET (x + b, y + a), c
PSET (x - b, y + a), c
PSET (x - b, y - a), c
a = a - 1
WEND
END SUB
SUB Pcirc (xc, yc, radius, colr)
x = radius
sum = 1 - radius
do
pset (xc+x, yc+y), colr
pset (xc+y, yc+x), colr
pset (xc-y, yc+x), colr
pset (xc-x, yc+y), colr
pset (xc-x, yc-y), colr
pset (xc-y, yc-x), colr
pset (xc+y, yc-x), colr
pset (xc+x, yc-y), colr
if y >= x then
exit do
elseif sum > 0 then
sum = sum - x - x + 2
x = x - 1
end if
sum = sum + y + y + 3
y = y + 1
loop
END SUB
SUB Zcirc (x%, y%, radius%, c%)
DO WHILE Degrees% < 361
Radians! = (3.14159 / 180) * Degrees%
PlotX! = radius% * SIN(Radians!)
PlotY! = radius% * COS(Radians!)
PSET (x% + PlotX!, y% - PlotY!), c%
Degrees% = Degrees% + 1
LOOP
END SUB