Just continuing testing this out of curiosity (and boredom!). I'm seeing a pattern with the timed numbers. There's only a few different numbers really, and they are shared among all the SUB's. Maybe this is more of a TIMER calc thing, and not a drawing faster thing?
I removed the RND calls to eliminate that element, and just had every SUB draw the same circle info over and over. 10 loops of 5000 circles. The SUB's share the exact same numbers. (although different winners). Made a 4th SUB (FC4) just to have a 4th player. It shares the same numbers as the others.
- Dav
I removed the RND calls to eliminate that element, and just had every SUB draw the same circle info over and over. 10 loops of 5000 circles. The SUB's share the exact same numbers. (although different winners). Made a 4th SUB (FC4) just to have a 4th player. It shares the same numbers as the others.
- Dav
Code: (Select All)
Screen _NewImage(1000, 700, 32)
Print
Print " fcirc fc fc3 fc4 "
Print
For i = 1 To 10
'time the fcirc sub
t# = Timer
For c = 1 To 5000
fcirc 400, 400, 100, _RGB(128, 128, 128)
Next
t1# = Timer - t#
'time the fc sub
t# = Timer
For c = 1 To 5000
fc 400, 400, 100, _RGB(255, 128, 128)
Next
t2# = Timer - t#
'time the fc3 sub
t# = Timer
For c = 1 To 5000
FC3 400, 400, 100, _RGB(128, 255, 128)
Next
t3# = Timer - t#
'time the fc4 sub
t# = Timer
For c = 1 To 5000
fc4 400, 400, 100, _RGB(128, 128, 255)
Next
t4# = Timer - t#
Print t1#, t2#, t3#, t4#
Next
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