_Title "Even Better Stars 2 Arrow Steering" 'b+ 2021-11-23 try with arrow steering 'Better Stars.sdlbas (B+=MGA) 2016-05-16
' odd or even number of point, fat or skinny, better fills
'Print (Pi) 'check pi
'End
Const Radians
= Pi
/ 180 'to convert an angle measured in degrees to and angle measure in radians, just mutiply by this
'setdisplay(xmax, ymax, 32, 1)
'setcaption("Better Stars demo")
'autoback(-2)
'main
Dim Shared x
(NS
), y
(NS
), dx
(NS
), dy
(NS
), ri
(NS
), ro
(NS
), p
(NS
), a
(NS
), turn
(NS
), fill
(NS
), c
(NS
) As _Unsigned Long loopcounter = 0
NewStar i
x(i) = x(i) + 2 * ri(i) ^ 2
dx(i) = dx(i) + 1
x(i) = x(i) - 2 * ri(i) ^ 2
dx(i) = dx(i) - 1
y(i) = y(i) + 2 * ri(i) ^ 2
dy(i) = dy(i) + 1
y(i) = y(i) - 2 * ri(i) ^ 2
dy(i) = dy(i) - 1
'ink(colr(c(i)))
Star x(i), y(i), ri(i), ro(i), p(i), a(i), fill(i)
x(i) = x(i) + dx(i)
y(i) = y(i) + dy(i)
ri(i) = 1.015 * ri(i)
ro(i) = 1.015 * ro(i)
a(i) = a(i) + turn(i)
NewStar i
'screenswap
'wait(50)
loopcounter = loopcounter + 1
x(nxt) = Cx + r * dx(nxt)
y(nxt) = Cy + r * dy(nxt)
ro
(nxt
) = ri
(nxt
) + 1 + Rnd fill(nxt) = 0 'Int(Rnd * 2)
c(nxt) = rndColor~&
Sub Star
(x
, y
, rInner
, rOuter
, nPoints
, angleOffset
, TFfill
) ' x, y are same as for circle,
' rInner is center circle radius
' rOuter is the outer most point of star
' nPoints is the number of points,
' angleOffset = angle offset IN DEGREES, it will be converted to radians in sub
' this is to allow us to spin the polygon of n sides
' TFfill filled True or False (1 or 0)
p_angle = Radians * (360 / nPoints): rad_angle_offset = Radians * angleOffset
x1
= x
+ rInner
* Cos(rad_angle_offset
) y1
= y
+ rInner
* Sin(rad_angle_offset
) x2
= x
+ rOuter
* Cos(i
* p_angle
+ rad_angle_offset
+ .5 * p_angle
) y2
= y
+ rOuter
* Sin(i
* p_angle
+ rad_angle_offset
+ .5 * p_angle
) x3
= x
+ rInner
* Cos((i
+ 1) * p_angle
+ rad_angle_offset
) y3
= y
+ rInner
* Sin((i
+ 1) * p_angle
+ rad_angle_offset
) x1 = x3: y1 = y3
'Circle (x, y), 2, &HFFFFFFFF