_TITLE "draw Spinner" 'B+ started 2019-06-15
'_SCREENMOVE 300, 20
newSpinner i
i2 = 1
lc = lc + 1
lc = 0
IF i2
< nSpinners
THEN i2
= i2
+ 1 drawSpinner s
(i
).x
, s
(i
).y
, s
(i
).sz
, _ATAN2(s
(i
).dy
, s
(i
).dx
), s
(i
).c
s(i).x = s(i).x + s(i).dx: s(i).y = s(i).y + s(i).dy
IF s
(i
).x
< -100 OR s
(i
).x
> xmax
+ 100 OR s
(i
).y
< -100 OR s
(i
).y
> ymax
+ 100 THEN newSpinner i
SUB newSpinner
(i
AS INTEGER) 'set Spinners dimensions start angles, color? s
(i
).dx
= (s
(i
).sz
* RND * 8) * r
* 2: s
(i
).dy
= (s
(i
).sz
* RND * 8) * r
* 2 CASE 0: s
(i
).x
= RND * (xmax
- 120) + 60: s
(i
).y
= 0:
IF s
(i
).dy
< 0 THEN s
(i
).dy
= -s
(i
).dy
CASE 1: s
(i
).x
= RND * (xmax
- 120) + 60: s
(i
).y
= ymax:
IF s
(i
).dy
> 0 THEN s
(i
).dy
= -s
(i
).dy
CASE 2: s
(i
).x
= 0: s
(i
).y
= RND * (ymax
- 120) + 60:
IF s
(i
).dx
< 0 THEN s
(i
).dx
= -s
(i
).dx
CASE 3: s
(i
).x
= xmax: s
(i
).y
= RND * (ymax
- 120) + 60:
IF s
(i
).dx
> 0 THEN s
(i
).dx
= -s
(i
).dx
DIM x1
, x2
, x3
, x4
, y1
, y2
, y3
, y4
, r
, a
, a1
, a2
, lg
, d
, rd
, red
, blue
, green
switch = switch + 2
switch
= switch
MOD 16 + 1 r = 10 * scale
x1
= x
+ r
* COS(heading
): y1
= y
+ r
* SIN(heading
) r = 2 * r 'lg lengths
a
= heading
+ .9 * lg
* _PI(1 / 5) + (lg
= switch
) * _PI(1 / 10) a
= heading
- .9 * (lg
- 4) * _PI(1 / 5) - (lg
= switch
) * _PI(1 / 10) x2
= x1
+ r
* COS(a
): y2
= y1
+ r
* SIN(a
) drawLink x1
, y1
, 3 * scale
, x2
, y2
, 2 * scale
, _RGB32(red
+ 20, green
+ 10, blue
+ 5) x3
= x2
+ r
* 1.5 * COS(a1
): y3
= y2
+ r
* 1.5 * SIN(a1
) drawLink x2
, y2
, 2 * scale
, x3
, y3
, scale
, _RGB32(red
+ 35, green
+ 17, blue
+ 8) a2
= a1
+ d
* _PI(1 / 8) * rd
/ 8 x4
= x3
+ r
* 1.5 * COS(a2
): y4
= y3
+ r
* 1.5 * SIN(a2
) drawLink x3
, y3
, scale
, x4
, y4
, scale
, _RGB32(red
+ 50, green
+ 25, blue
+ 12) r = r * .5
fcirc x1
, y1
, r
, _RGB32(red
- 20, green
- 10, blue
- 5) x2
= x1
+ (r
+ 1) * COS(heading
- _PI(1 / 12)): y2
= y1
+ (r
+ 1) * SIN(heading
- _PI(1 / 12)) fcirc x2, y2, r * .2, &HFF000000
x2
= x1
+ (r
+ 1) * COS(heading
+ _PI(1 / 12)): y2
= y1
+ (r
+ 1) * SIN(heading
+ _PI(1 / 12)) fcirc x2, y2, r * .2, &HFF000000
r = r * 2
x1
= x
+ r
* .9 * COS(heading
+ _PI): y1
= y
+ r
* .9 * SIN(heading
+ _PI) TiltedEllipseFill
0, x1
, y1
, r
, .7 * r
, heading
+ _PI, _RGB32(red
, green
, blue
)
DIM a
, a1
, a2
, x3
, x4
, x5
, x6
, y3
, y4
, y5
, y6
x3
= x1
+ r1
* COS(a1
): y3
= y1
+ r1
* SIN(a1
) x4
= x1
+ r1
* COS(a2
): y4
= y1
+ r1
* SIN(a2
) x5
= x2
+ r2
* COS(a1
): y5
= y2
+ r2
* SIN(a1
) x6
= x2
+ r2
* COS(a2
): y6
= y2
+ r2
* SIN(a2
) fquad x3, y3, x4, y4, x5, y5, x6, y6, c
fcirc x1, y1, r1, c
fcirc x2, y2, r2, c
'need 4 non linear points (not all on 1 line) list them clockwise so x2, y2 is opposite of x4, y4
ftri x1, y1, x2, y2, x4, y4, c
ftri x3, y3, x4, y4, x1, y1, c
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
prc
= _RGB32(255, 255, 255, 255) mx2 = max + max
_SOURCE tef
'point wont read without this! LINE (lasti
, lastj
)-(i
, j
), prc
lasti = i: lastj = j
x = 0
x = x + 1
xleft(y) = x
x = x + 1
x = x + 1
IF x
= mx2
THEN xright
(y
) = xleft
(y
) ELSE xright
(y
) = x
IF xleft
(y
) <> mx2
THEN LINE (xleft
(y
) + x0
- max
, y
+ y0
- max
)-(xright
(y
) + x0
- max
, y
+ y0
- max
), c
, BF