This is a ( poorly thought out) suggested task on Rosetta Code.
Draw at least 20 rectangles with a common center. None of the rectangles must touch or intersect any other rectangle.
Animate the colours of the rectangles by fading in the colour from the outermost rectangle to the innermost.
The animation loop can continue for a definite number of iterations or forever.
Gave me a couple of happy hours of coding to get this. The code runs in real time at about this speed, but I included code to save each step as a BMP, then stitched them into the animated GIFs shown here. ( Could have done this in code, but easier just to use ImageMagick from the command line)
Anyone up for trying it out? Once you've got it working there are all sorts of variations to try- say triangles, or rotating each of the nested shapes, or different colour sequences... a few are included here.
-
-
' http://rosettacode.org/wiki/Vibrating_rectangles
' Draw at least 20 rectangles with a common center, to be more precise, the circumcenter of all the rectangles must coincide. None of the rectangles must touch or intersect any other rectangle.
' Animate the colours of the rectangles by fading in the colour from the outermost rectangle to the innermost.
' The animation loop can continue for a definite number of iterations or forever.
nomainwin
WindowWidth =460
WindowHeight =440
open "Pentangles.." for graphics_nsb as #wg
#wg "trapclose quit"
#wg "size 3 ; fill darkblue"
dim boxCol$( 20)
for i =0 to 19 ' Create 20 rectangles in a colour sequence which is stored..
R =int( i *255 /19)
G =100
B =255 -R
C$ =str$( R) +" " +str$( G) +" " +str$( B)
boxCol$( i) =C$
#wg "color "; C$
call hex, i , i *6
next i
for animation =1 to 100
for i =19 to 0 step -1 ' redraw the set with the colour chosen displaced by 1 from previous...
s =( i +animation) mod 20
select case s
case 19
#wg "color "; boxCol$( i)
case else
#wg "color "; boxCol$( s)
end select
call hex, i, i *6
scan
next i
#wg "getbmp scr 1 1 450 420"
bmpsave "scr", "pentangle" +right$( "000" +str$( animation), 3) +".bmp"
#wg "cls"
#wg "drawbmp scr 1 1"
timer 500, [o]
wait
[o]
timer 0
next animation
wait
sub quit j$
close #j$
end
end sub
sub hex i, a ' i is side length, a is angular offset in degrees
#wg "up"
#wg "goto "; 230 +10 *i *cosRad( 0 -a); " "; 220 -10 *i *sinRad( 0 -a)
#wg "down"
for k =1 to 5
#wg "goto "; 230 +10 *i *cosRad( k *144 -a); " "; 220 -10 *i *sinRad( k *144 -a)
next k
end sub
function sinRad( t)
sinRad =sin( t *3.14159265 /180)
end function
function cosRad( t)
cosRad =cos( t *3.14159265 /180)
end function