Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Another small filled circe sub (not as fast as fcirc)
#26
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

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

Find my programs here in Dav's QB64 Corner
Reply


Messages In This Thread
RE: Another small filled circe sub (not as fast as fcirc) - by Dav - 08-29-2024, 11:43 PM



Users browsing this thread: 12 Guest(s)