# Polyspirals ( a Rosetta Code task.). - One of those graphic exercizes just crying out for clever colour effects..

```
'A Polyspiral is a spiral made of multiple line segments, whereby each segment is
'   larger (or smaller) than the previous one by a given amount.
'   Each segment also changes direction at a given angle.

'The task: animate a series of polyspirals, by drawing a complete spiral then incrementing the angle,
'   and (after clearing the background) drawing the next, and so on.
'   Every spiral will be a frame of the animation.
'   The animation may stop as it goes full circle or continue indefinitely.
'   The given input values may be varied.

nomainwin

WindowWidth  =500
WindowHeight =500

global sScreens: sScreens =0

open "Polyspiral- let me run for a while!!" for graphics_nsb as #wg

#wg "trapclose [quit]"
#wg "down ; fill 180 180 250 ; color darkblue"
#wg "when leftButtonDown saveScreen"

incr        =   0.0

for iteration =0 to 9999

#wg "cls ; fill 180 180 250"
R       = iteration mod 256
G       = 50
B       = 255 -R
'#wg "color "; str\$( R) +" " +str\$( G) +" " +str\$( B)

x1          = 250
y1          = 250

incr    = (incr + 0.2) mod 360

length  = 10
angle   = incr

#wg "size 1"

for i = 1 to 70
x2          = x1 + cos( angle *3.14159265 /180) * length
y2          = y1 + sin( angle *3.14159265 /180) * length
#wg "line "; x1; " "; y1; " "; x2; " "; y2
#wg "size "; int( 1 +i /5)
x1          = x2
y1          = y2
length      = length + 3
angle       = ( angle + incr) mod 360
#wg "color "; rgb\$( i)
next i

scan
'callDLL #kernel32, "Sleep", 200 as long, ret as void

next iteration

wait

function rgb\$( i)
r\$ =str\$( int( 128 +127 *sin( i *0.12)))
g\$ =str\$( int( 128 +127 *sin( i *0.17)))
b\$ =str\$( int( 128 +127 *cos( i *0.06)))
rgb\$ =r\$ +" " +g\$ +" " +b\$
end function

[quit]
close #wg
end

sub saveScreen h\$, x, y
#wg "getbmp scr 1 1 500 500"
bmpsave "scr", "poly" +right\$( "000" +str\$( sScreens), 3) + ".bmp" 'un-rem to save screens
sScreens    = sScreens +1
end sub

```