Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Another small filled circe sub (not as fast as fcirc)
#28
Agreed the Timer calculations can be handled better!

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 + ...
Reply


Messages In This Thread
RE: Another small filled circe sub (not as fast as fcirc) - by bplus - 08-30-2024, 12:30 AM



Users browsing this thread: 23 Guest(s)