_TITLE "Circle Filled by Steve mod B+" '2019-02-06  
 
LINE (0, 0)-(800, 600), black
, BF
 LINE (200, 200)-(400, 400), &HFFFFFFFF, B
 PaintWithBalls 
300, 300, 10, _RGB32(255, 128, 0)INPUT "To see a show, press enter,  and other + enter ends program... "; wate$
  
    LINE (0, 0)-(800, 600), &HFF000000, BF
     PaintWithBalls 
200, 200, INT(RND * 45 + 5), _RGB32(255, 100, 0) 
    br = 2 * ballRadius + 1
    IF circClear
(X
, Y
, ballRadius
) THEN         ball X, Y, ballRadius, ballColr
        PaintWithBalls X 
+ br 
* COS(0), Y 
+ br 
* SIN(0), ballRadius
, ballColr
        PaintWithBalls X 
+ br 
* COS(ra
), Y 
+ br 
* SIN(ra
), ballRadius
, ballColr
        PaintWithBalls X 
+ br 
* COS(ra 
* 2), Y 
+ br 
* SIN(ra 
* 2), ballRadius
, ballColr
        PaintWithBalls X 
+ br 
* COS(ra 
* 3), Y 
+ br 
* SIN(ra 
* 3), ballRadius
, ballColr
        PaintWithBalls X 
+ br 
* COS(ra 
* 4), Y 
+ br 
* SIN(ra 
* 4), ballRadius
, ballColr
        PaintWithBalls X 
+ br 
* COS(ra 
* 5), Y 
+ br 
* SIN(ra 
* 5), ballRadius
, ballColr
 
'Steve McNeil's  copied from his forum   note: Radius is too common a name
 
    RadiusError = -subRadius
    X = subRadius
    Y = 0
 
    'IF subRadius = 0 THEN PSET (CX, CY): EXIT SUB
 
    ' Draw the middle span here so we don't draw it twice in the main loop,
    ' which would be a problem with blending turned on.
        RadiusError = RadiusError + Y * 2 + 1
                'LINE (CX - Y, CY - X)-(CX + Y, CY - X), , BF
                'LINE (CX - Y, CY + X)-(CX + Y, CY + X), , BF
            X = X - 1
            RadiusError = RadiusError - X * 2
        Y = Y + 1
        'LINE (CX - X, CY - Y)-(CX + X, CY - Y), , BF
 
        'LINE (CX - X, CY + Y)-(CX + X, CY + Y), , BF
 
    circClear = -1
 
        kr 
= _RGB32((r 
- rad
) / r 
* rd
, (r 
- rad
) / r 
* g
, (r 
- rad
) / r 
* b
)        fel x, y, rad, rad, kr
 
'FillEllipse is too much typing so aballRadiuseviated to fel
' with Steve's EllipseFill, who needs CircleFill? fix for 0 radii 2019-02-05
' Is this fast enough for general circle fill (June 2018):  https://www.qb64.org/forum/index.php?topic=298.msg1942#msg1942
'  EllipseFill SMcNeill (Nov 3, 2018) https://www.qb64.org/forum/index.php?topic=755.msg6506#msg6506
 
 
    a = 2 * rx * rx
    b = 2 * ry * ry
    x = rx
    xx = ry * ry * (1 - rx - rx)
    yy = rx * rx
    sx = b * rx
 
        LINE (cx 
- x
, cy 
- y
)-(cx 
+ x
, cy 
- y
), c
, BF
         IF y 
<> 0 THEN LINE (cx 
- x
, cy 
+ y
)-(cx 
+ x
, cy 
+ y
), c
, BF
  
        y = y + 1
        sy = sy + a
        e = e + yy
        yy = yy + a
 
            x = x - 1
            sx = sx - b
            e = e + xx
            xx = xx + b
 
    x = 0
    y = ry
    xx = rx * ry
    yy = rx * rx * (1 - ry - ry)
    e = 0
    sx = 0
    sy = a * ry
 
        LINE (cx 
- x
, cy 
- y
)-(cx 
+ x
, cy 
- y
), c
, BF
         LINE (cx 
- x
, cy 
+ y
)-(cx 
+ x
, cy 
+ y
), c
, BF
  
            x = x + 1
            sx = sx + b
            e = e + xx
            xx = xx + b
 
        y = y - 1
        sy = sy - a
        e = e + yy
        yy = yy + a
 
 
 
    rand% 
= INT(RND * (hi% 
- lo% 
+ 1)) + lo%