A favourite coding activity for me is generating unusual mathematical figures and playing with the parameters. Many have traditional names, and I'd just found a reference page with several that were new to me.
Curves to display in 2D are usually in Cartesian ( x, y) coordinates, or polar ( r, theta). I've variations on the following code for generating coloured families of trochoids, cycloids, cochleoid, trifoliuM, sextic, Fermat spiral, etc. Using colour sequential fills and adding progressive rotations produces eye-catching graphics.
' ratchet curve
nomainwin
pi =4 *atn( 1)
Cx =251 ' centre to fill from
Cy =251
r = 30 ' Initial colour values for the fill.
g =260
bl = 20
WindowWidth =500
WindowHeight =550
open "Ratchet pawl" for graphics_nsb as #wg
hw =hwnd( #wg)
calldll #user32, "GetDC", hw as ulong, hdc as ulong
#wg "trapclose quit"
#wg "home"
state$ ="up"
for a =140 to 10 step -2
re =int( 128 +128 *cos( a /7))
gr =int( 128 +128 *sin( a /19))
bl =int( 128 +128 *cos( a /37))
fillCol$ =str$( re) +" " +str$( gr) +" " +str$( bl)
#wg "color "; fillCol$
#wg "backcolor "; fillCol$
targetcolor =bl *2^16 +gr *2^8 +re ' this is colour to fill WITH
' this is also the colour of the outline to fill out TO.
for theta =0 to 2 *pi +0.002 step 0.001
scan
r = a +int( ( ( 1.5 *( theta)) mod pi) *( a /5))
x =250 +r *cos( theta +a /130)
y =250 -r *sin( theta +a /130)
if state$ ="down" then
#wg "goto "; int( x); " "; int( y)
else
#wg "goto "; int( x); " "; int( y)
#wg "down"
state$ ="down"
end if
next theta
'goto [skip]
calldll #gdi32, "ExtFloodFill",_
hdc as ulong,_
Cx as long,_
Cy as long,_
targetcolor as long,_ ' ie fill out 'til this colour is met..
_FLOODFILLBORDER as long,_
result as long
[skip]
next a
#wg "getbmp scr 0 0 500 500"
bmpsave "scr", "ratchet6d.bmp"
wait
sub quit h$
calldll #user32, "ReleaseDC", hw as ulong, hdc as ulong, ret as void 'release the DC
close #wg
end
end sub