_TITLE "Spiral Colored Balls 2" 'B+ 2019-10-29 mod from ' 2019-10-29 post 2nd way to display balls
' 2019-10-29 mod be able to draw these balls anywhere
' Rotate colors on a sphere.txt for JB v2.0 bplus 2018-04-16
' from (extremely simplified) Double spiral.bas SmallBASIC 0.12.8 [B+=MGA] 2017-03-28
CONST xmax
= 1200, ymax
= 700, pi
= _PI, nBalls
= 5, ww
= 3.14159 / 2, gravity
= 2
_SCREENMOVE 100, 20 'this fits my screen yours may be different
newBall i
LINE (0, i
)-(xmax
, i
), _RGB32(100 + i
/ ymax
* 40, 100 + i
/ ymax
* 50, 160 + i
/ ymax
* 95) 'ready for collision
b
(i
).a
= _ATAN2(b
(i
).dy
, b
(i
).dx
) power = (b(i).dx ^ 2 + b(i).dy ^ 2) ^ .5
IF SQR((b
(i
).x
- b
(j
).x
) ^ 2 + (b
(i
).y
- b
(j
).y
) ^ 2) < 200 * (b
(i
).sc
+ b
(j
).sc
) THEN b
(i
).a
= _ATAN2(b
(i
).y
- b
(j
).y
, b
(i
).x
- b
(j
).x
) b
(j
).a
= _ATAN2(b
(j
).y
- b
(i
).y
, b
(j
).x
- b
(i
).x
) b
(i
).dx
= power
* COS(b
(i
).a
) b
(i
).dy
= power
* SIN(b
(i
).a
) b(i).dy = b(i).dy + gravity
b(i).x = b(i).x + b(i).dx
b(i).y = b(i).y + b(i).dy '+ 2 * gravity
IF b
(i
).x
< -200 * b
(i
).sc
OR b
(i
).x
> xmax
+ 200 * b
(i
).sc
THEN newBall i
IF b
(i
).y
+ 220 * b
(i
).sc
> ymax
THEN b(i).y = ymax - 220 * b(i).sc
b(i).dy = b(i).dy * -.8
IF b
(i
).dx
= 0 THEN b
(i
).dx
= rdir
ELSE b
(i
).dx
= b
(i
).dx
* 1.03 drawBall i
w = ww 'fix
e = w - pi / 4 / (490 - 300)
tmp = e: e = w: w = tmp
x
= b
(i
).x
+ e
* b
(i
).sc
* COS(p
* 2) y
= b
(i
).y
- 90 * b
(i
).sc
+ e
* b
(i
).sc
* SIN(p
* 2) + r
* b
(i
).sc
lc = lc + 1
fcirc x, y, 6 * b(i).sc, plasma~&(i)
b
(i
).x
= RND * xmax
- 40 + 20 b(i).dx = rand(1, 3) * rdir
b(i).dy = rand(-5, 5)
b(i).sc = rand(2, 5) / 10
setRGB i
b
(i
).pr
= RND ^ 3: b
(i
).pg
= RND ^ 3: b
(i
).pb
= RND ^ 3: b
(i
).pn
= 1
b(i).pn = b(i).pn + .05
plasma~&
= _RGBA32(127 + 127 * SIN(b
(i
).pr
* b
(i
).pn
), 127 + 127 * SIN(b
(i
).pg
* b
(i
).pn
), 127 + 127 * SIN(b
(i
).pb
* b
(i
).pn
), 255)
rand
= (RND * (hi
- lo
+ 1)) \
1 + lo
'from Steve Gold standard
Radius
= ABS(R
): RadiusError
= -Radius: X
= Radius: Y
= 0 LINE (CX
- X
, CY
)-(CX
+ X
, CY
), C
, BF
RadiusError = RadiusError + Y * 2 + 1
LINE (CX
- Y
, CY
- X
)-(CX
+ Y
, CY
- X
), C
, BF
LINE (CX
- Y
, CY
+ X
)-(CX
+ Y
, CY
+ X
), C
, BF
X = X - 1
RadiusError = RadiusError - X * 2
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