OK I started using _Display because I didn't like seeing all those incomplete circles drawn and at first it looked like fcirc was going to win everytime. _Display definitely slowed everything down considerable. I had switched to declared Types for the FC3 sub because I thought the optimized compiler would love that!
I thought wrong! FC3 sub beat out fcirc 8 trials out of 10 when I switched back to default Single Type for the FC3 sub!!!
Not what I expected, but something I saw yesterday when playing around with mods of Dav's starting code.
8 out of 10 trials FC3 was faster with optimized compiler and using _Display to show completely drawn circles:
I am curious if your results differ? on both Windows and Linux systems
I thought wrong! FC3 sub beat out fcirc 8 trials out of 10 when I switched back to default Single Type for the FC3 sub!!!
Not what I expected, but something I saw yesterday when playing around with mods of Dav's starting code.
8 out of 10 trials FC3 was faster with optimized compiler and using _Display to show completely drawn circles:
Code: (Select All)
_Title "FC3 versus fcirc QB64pe v3.13.1" ' b+ 2024-08-29
'Dav, AUG/2024 bplus mod 2024-08-28 try faster FC2 mod of fc
' 2024-08-29 try larger circles all on screen with FC3
$Checking:Off
Screen _NewImage(1000, 700, 32)
_ScreenMove 150, 0
Randomize Timer
Print "Overlapping lines check of FC2"
FC3 500, 350, 300, &H200000FF ' check for overlapping lines
Print "Looking good! no lighter lines." ' FC passes too BTW
Print: Print " zzz... press any for timed test"
Sleep
Cls
For i = 1 To 10 ' in case going first has disadvantage
'time the fc sub
t# = Timer
For c = 1 To 2000
fcirc Rnd * (_Width - 700) + 350, 350, 350, _RGB32(Rnd * 255, Rnd * 255, Rnd * 255)
_Display
Next
t1# = t1# + Timer - t#
'time the fc2 sub
t# = Timer
For c = 1 To 2000
FC3 Rnd * (_Width - 700) + 350, 350, 350, _RGB32(Rnd * 255, Rnd * 255, Rnd * 255)
_Display
Next
t2# = t2# + Timer - t#
Next
Print
Print "fcirc ="; t1#
Print " FC3 ="; t2#
Print
If t2# < t1# Then
Print "FC3 wins!"
ElseIf t1# < t2# Then ' EDIT fixed!
Print "fcirc wins!"
Else
Print "Tie fcirc = FC3 time"
End If
_Display
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 FC3 (cx, cy, r, clr&)
Line (cx - r, cy)-(cx + r, cy), clr&, BF
y = 1
r2 = r * r ' Dav mod
While y <= r
x = Int(Sqr(r2 - y * y)) ' r2 Dav
Line (cx - x, cy + y)-(cx + x, cy + y), clr&, BF
Line (cx - x, cy - y)-(cx + x, cy - y), clr&, BF
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 SubI am curious if your results differ? on both Windows and Linux systems
724 855 599 923 575 468 400 206 147 564 878 823 652 556 bxor cross forever

