55 lines
1.2 KiB
Plaintext
55 lines
1.2 KiB
Plaintext
' version 15-10-2016
|
|
' compile with: fbc -s gui
|
|
|
|
' Variant with Integer-Based Arithmetic from Wikipedia page:
|
|
' Midpoint circle algorithm
|
|
Sub circle_(x0 As Integer, y0 As Integer , radius As Integer, Col As Integer)
|
|
|
|
Dim As Integer x = radius
|
|
Dim As Integer y
|
|
' Decision criterion divided by 2 evaluated at x=r, y=0
|
|
Dim As Integer decisionOver2 = 1 - x
|
|
|
|
While(x >= y)
|
|
PSet(x0 + x, y0 + y), col
|
|
PSet(x0 - x, y0 + y), col
|
|
PSet(x0 + x, y0 - y), col
|
|
PSet(x0 - x, y0 - y), col
|
|
PSet(x0 + y, y0 + x), col
|
|
PSet(x0 - y, y0 + x), col
|
|
PSet(x0 + y, y0 - x), col
|
|
PSet(x0 - y, y0 - x), col
|
|
y = y +1
|
|
If decisionOver2 <= 0 Then
|
|
decisionOver2 += y * 2 +1 ' Change in decision criterion for y -> y +1
|
|
Else
|
|
x = x -1
|
|
decisionOver2 += (y - x) * 2 +1 ' Change for y -> y +1, x -> x -1
|
|
End If
|
|
Wend
|
|
|
|
End Sub
|
|
|
|
' ------=< MAIN >=------
|
|
|
|
ScreenRes 600, 600, 32
|
|
Dim As Integer w, h, depth
|
|
Randomize Timer
|
|
|
|
ScreenInfo w, h
|
|
|
|
For i As Integer = 1 To 10
|
|
circle_(Rnd * w, Rnd * h , Rnd * 200 , Int(Rnd *&hFFFFFF))
|
|
Next
|
|
|
|
|
|
'save screen to BMP file
|
|
BSave "Name.BMP", 0
|
|
|
|
|
|
' empty keyboard buffer
|
|
While Inkey <> "" : Wend
|
|
WindowTitle "hit any key to end program"
|
|
Sleep
|
|
End
|