You may configure the rods yourself, or have them randomly generated.
The lengths of the rods are normalized in such a way that the total lenght of the rods equals half of the screen width.
The "speed" of a rod is the angular speed around the connecting point of that rod.
Code: Select all
' *** Connected, rotating rods ***
'     (touch screen to stop)
'y'
nr=8          ' number of (random) rods
size_min=0.4  ' minimum relative length of a rod (max.=1)
speed_max=3   ' maximum angular speed in degrees per iteration
rr=12         ' thickness of the rods
random=0      ' random rods (=0 : user defined rods with READ DATA)
orient=0      ' orientation is portrait (=1 : landscape)
iter=25        ' duration of each iteration in msec
' *** this section is used only when variable random=0)
data 0.8, 1   ' size and speed of the first (inner) rod
data 0.4, -3 ' 2nd (middle) rod
data 0.2, 5    ' 3rd (outer) rod
data 0.08, -7
data 0.08, 6.5
data 0.3, 8.5
'' ***
option angle degrees ! option base 1
if orient then set orientation landscape else set orientation portrait
set toolbar off
graphics ! graphics clear .8,.8,.8
draw size 1 ! draw color 0,0,0
get screen size sw,sh ! cx=sw/2 ! cy=sh/2
sum=0 ! iter/=1000 ! if not random then nr=4
dim size(nr),speed(nr),angle(nr)
for i=1 to nr       ' get sizes and rotation speeds of the rods
  
  if random then 
      size(i)=size_min+rnd(1-size_min)
      speed(i)=speed_max-2*rnd(1)*speed_max
    else ! read size(i),speed(i)
    end if
  stick("stick"&i,size(i),rr)
  sum+=size(i)
  next i
f=floor(nr^0.25)
scal=f*min(cx,cy)/sum  '  scaling factor
for i=1 to nr
  size(i)*=scal ! stick("stick"&i,size(i),rr)
  next i
draw to cx+scal*sum,cy
do                     '  let the rods rotate
  rot()
  draw line to rot.x , rot.y
  pause iter
  'slowdown
  until touch_x(0)>0
end
def stick(sn$,sl,t)
r=t/2
sprite sn$ begin sl,t
fill color .65,.35,.35
fill rect r,0 to sl,r
fill color .5,.2,.2
fill rect r,r to sl,t
fill color 0,0,0
fill circle r,t/2 size r
draw color 1,1,0 ! draw size 2
draw line r,.5*r to r,1.5*r
draw line .5*r,r to 1.5*r,r
sprite sn$ end
draw size 1 ! draw color 0,0,0 ! fill color 0,0,0
end def
def rot()
r=.rr/2 ! x=.cx ! y=.cy
for i=1 to .nr
  .angle(i)+=.speed(i) ! a=.angle(i) ! l=.size(i)/2-r
  dx=l*(1-cos(a)) ! dy=l*sin(a)
   sprite "stick"&i at x-dx,y-dy angle -.angle(i)
  sprite "stick"&i show
  x+=.size(i)*cos(.angle(i)) ! y-=.size(i)*sin(.angle(i))
  next i
end def
