Agreed the Timer calculations can be handled better!
Use Timer(.001) for max accuracy
Try accumulation of totals and bigger longer drawing circles
This is representative of 5 trials I've run so far:
Aw crap you messed with the FC3 code !!!
This is one decision too many!!!
If y2 < r2 Then
Use Timer(.001) for max accuracy
Try accumulation of totals and bigger longer drawing circles
Code: (Select All)
Screen _NewImage(1000, 700, 32)
For i = 1 To 10
'time the fcirc sub
t# = Timer(.001)
For c = 1 To 500
fcirc 400, 400, 350, _RGB(128, 128, 128)
Next
t1# = t1# + Timer(.001) - t#
'time the fc sub
t# = Timer(.001)
For c = 1 To 500
fc 400, 400, 350, _RGB(255, 128, 128)
Next
t2# = t2# + Timer(.001) - t#
'time the fc3 sub
t# = Timer(.001)
For c = 1 To 500
FC3 400, 400, 350, _RGB(128, 255, 128)
Next
t3# = t3# + Timer(.001) - t#
'time the fc4 sub
t# = Timer(.001)
For c = 1 To 500
fc4 400, 400, 350, _RGB(128, 128, 255)
Next
t4# = t4# + Timer(.001) - t#
' Print t1#, t2#, t3#, t4#
Next
Cls
Print
Print " fcirc ", " fc ", " fc3 ", " fc4 "
Print
Print "Final Total:"
Print t1#, t2#, t3#, t4#
Sub fc (cx, cy, r, clr&)
For y = -r To r
x = Int(Sqr(r * r - y * y))
Line (cx - x, cy + y)-(cx + x, cy + y), clr&, BF
Next
End Sub
Sub fc4 (cx, cy, r, clr&)
r2 = r * r
For y = 0 To r
y2 = y * y
'If y2 <= r2 Then
x = Int(Sqr(r2 - y2))
Line (cx - x, cy - y)-(cx + x, cy - y), clr&, BF
Line (cx - x, cy + y)-(cx + x, cy + y), clr&, BF
'End If
Next
End Sub
Sub FC3 (cx, cy, r, clr&)
Line (cx - r, cy)-(cx + r, cy), clr&, BF
y = 1
r2 = r * r ' Dav mod
While y <= r
y2 = y * y
If y2 < r2 Then
x = Int(Sqr(r2 - y2))
Line (cx - x, cy + y)-(cx + x, cy + y), clr&, BF
Line (cx - x, cy - y)-(cx + x, cy - y), clr&, BF
End If
y = y + 1
Wend
End Sub
Sub fcirc (CX As Integer, CY As Integer, R As Integer, C As _Unsigned Long)
Dim Radius As Integer, RadiusError As Integer
Dim X As Integer, Y As Integer
Radius = Abs(R): RadiusError = -Radius: X = Radius: Y = 0
If Radius = 0 Then PSet (CX, CY), C: Exit Sub
Line (CX - X, CY)-(CX + X, CY), C, BF
While X > Y
RadiusError = RadiusError + Y * 2 + 1
If RadiusError >= 0 Then
If X <> Y + 1 Then
Line (CX - Y, CY - X)-(CX + Y, CY - X), C, BF
Line (CX - Y, CY + X)-(CX + Y, CY + X), C, BF
End If
X = X - 1
RadiusError = RadiusError - X * 2
End If
Y = Y + 1
Line (CX - X, CY - Y)-(CX + X, CY - Y), C, BF
Line (CX - X, CY + Y)-(CX + X, CY + Y), C, BF
Wend
End Sub
This is representative of 5 trials I've run so far:
Aw crap you messed with the FC3 code !!!
This is one decision too many!!!
If y2 < r2 Then
b = b + ...