41 lines
1.0 KiB
Plaintext
41 lines
1.0 KiB
Plaintext
Procedure rasterCircle(cx, cy, r, Color)
|
|
;circle must lie completely within the image boundaries
|
|
Protected f= 1 - r
|
|
Protected ddF_X, ddF_Y = -2 * r
|
|
Protected x, y = r
|
|
|
|
Plot(cx, cy + r, Color)
|
|
Plot(cx, cy - r, Color)
|
|
Plot(cx + r, cy, Color)
|
|
Plot(cx - r, cy, Color)
|
|
While x < y
|
|
If f >= 0
|
|
y - 1
|
|
ddF_Y + 2
|
|
f + ddF_Y
|
|
EndIf
|
|
x + 1
|
|
ddF_X + 2
|
|
f + ddF_X + 1
|
|
Plot(cx + x, cy + y, Color)
|
|
Plot(cx - x, cy + y, Color)
|
|
Plot(cx + x, cy - y, Color)
|
|
Plot(cx - x, cy - y, Color)
|
|
Plot(cx + y, cy + x, Color)
|
|
Plot(cx - y, cy + x, Color)
|
|
Plot(cx + y, cy - x, Color)
|
|
Plot(cx - y, cy - x, Color)
|
|
Wend
|
|
EndProcedure
|
|
|
|
OpenWindow(0, 0, 0, 100, 100, "MidPoint Circle Algorithm", #PB_Window_SystemMenu)
|
|
CreateImage(0, 100, 100, 32)
|
|
StartDrawing(ImageOutput(0))
|
|
Box(0, 0, 100, 100, RGB(0, 0, 0))
|
|
rasterCircle(25, 25, 20, RGB(255, 255, 255))
|
|
rasterCircle(50, 50, 40, RGB(255, 0, 0))
|
|
StopDrawing()
|
|
ImageGadget(0, 0, 0, 0, 0, ImageID(0))
|
|
|
|
Repeat: Until WaitWindowEvent() = #PB_Event_CloseWindow
|