Here is my original source.
It's old now and unoptimised.
' ROTATING BAR THING BY SHOCKWAVE (C) 2006 --
'
'
'--------------------------------------------
'===============================================================================
' DEFINE CONSTANTS AND INITIALISE STUFF;
'===============================================================================
OPTION STATIC
OPTION EXPLICIT
CONST XRES = 640 : ' SCREEN WIDTH.
CONST YRES = 480 : ' SCREEN HEIGHT.
CONST XCENT = XRES / 2 : ' X CENTRE OF SCREEN.
CONST YCENT = YRES / 2 : ' Y CENTRE OF SCREEN.
CONST RAD_2_DEG AS DOUBLE = ( (4*ATN(1)) / 180 )
#define ptc_win
#Include Once "tinyptc.bi"
DIM SHARED AS UINTEGER BUFFER ( XRES * YRES ) :' THE SCREEN BUFFER.
DECLARE SUB TWISTY()
DIM SHARED GADD AS DOUBLE
'===============================================================================
' OPEN THE SCREEN;
'===============================================================================
IF ( PTC_OPEN ( "DBF / GVY ADVERTRO", XRES, YRES ) = 0 ) THEN
END -1
END IF
'===============================================================================
' MAIN LOOP;
'===============================================================================
DO
TWISTY
PTC_UPDATE@BUFFER(0)
ERASE BUFFER
LOOP UNTIL INKEY$=CHR$(27)
END
SUB TWISTY()
DIM AS INTEGER X1,X2,X3,X4,L,V,RR
DIM AS INTEGER Y1,Y2,Y3,Y4
DIM Q AS INTEGER
DIM AS DOUBLE QQ,VVV
VVV=.7*SIN(GADD*RAD_2_DEG)
GADD=GADD+.5
FOR Q =0 TO YRES-1
X1=XCENT+(150*SIN((GADD+QQ)*RAD_2_DEG))
X2=XCENT+(150*SIN((GADD+90+QQ)*RAD_2_DEG))
X3=XCENT+(150*SIN((GADD+180+QQ)*RAD_2_DEG))
X4=XCENT+(150*SIN((GADD+270+QQ)*RAD_2_DEG))
'BUFFER(XRES*Q+(X2))=&HFFFFFF
'BUFFER(XRES*Q+(X3))=&HFFFFFF
'BUFFER(XRES*Q+(X4))=&HFFFFFF
IF X2>X1 THEN
V=X2-X1
RR=RGB(0,0,V)
FOR L=X1 TO X2
BUFFER(XRES*Q+(L))=RR
NEXT
END IF
IF X3>X2 THEN
V=X3-X2
RR=RGB(V,0,0)
FOR L=X2 TO X3
BUFFER(XRES*Q+(L))=RR
NEXT
END IF
IF X4>X3 THEN
V=X4-X3
RR=RGB(V,0,V)
FOR L=X3 TO X4
BUFFER(XRES*Q+(L))=RR
NEXT
END IF
IF X1>X4 THEN
V=X1-X4
RR=RGB(0,V,0)
FOR L=X4 TO X1
BUFFER(XRES*Q+(L))=RR
NEXT
END IF
QQ=QQ+VVV
NEXT Q
END SUB