' This program exported from BASIC Anywhere Machine (Version [5.2.3].[2026.05.16.03.15]) on 2026.06.16 at 03:42 (Coordinated Universal Time)
' This program by Charlie Veniot
' Animated graphing of a circular "meander" using DRAW statements
' to get plot points
' see: https://en.wikipedia.org/wiki/Meander_(art)
ALERT( "At any time click/touch, and hold that click/touch, to pause the animation.\n\n" _
+ "Release to click/touch to resume the animation.")
d% = 170
πππrun_againπππ:
s = IFF( d% < 180, 0.03, 0.01 )
SCREEN _NEWIMAGE(d% * 2 + 1,d% * 2 + 1,17)
COLOR ,1
CLS
rndc% = INT( RND * 61 + 2 )
FOR iteration% = 1 TO 4
c% = IFF(iteration% < 3, 63, rndc%)
p1xlast% = -1 : p1ylast% = -1
p2xlast% = -1 : p2ylast% = -1
p3xlast% = -1 : p3ylast% = -1
p4xlast% = -1 : p4ylast% = -1
p5xlast% = -1 : p5ylast% = -1
p6xlast% = -1 : p6ylast% = -1
p7xlast% = -1 : p7ylast% = -1
p8xlast% = -1 : p8ylast% = -1
FOR i% = 0 TO 4
FOR a% = 0 TO 72
DRAW "TA" + (a% + i% * 72)
IF iteration% < 3 OR BETWEEN(a%, 10, 70) THEN
GOSUB CIRCLE_1
END IF
IF iteration% < 3 OR BETWEEN(a%, 15, 35) OR BETWEEN(a%, 45, 65) THEN
GOSUB CIRCLE_2
END IF
IF iteration% < 3 OR BETWEEN(a%, 20, 30) OR BETWEEN(a%, 50, 60) THEN
GOSUB CIRCLE_3
END IF
IF iteration% < 3 OR BETWEEN(a%, 20, 25) OR BETWEEN(a%, 55, 60) THEN
GOSUB CIRCLE_4
END IF
IF iteration% < 3 OR BETWEEN(a%, 15, 25) OR BETWEEN(a%, 55, 65) THEN
GOSUB CIRCLE_5
END IF
IF iteration% < 3 OR BETWEEN(a%, 10, 30) OR BETWEEN(a%, 50, 70) THEN
GOSUB CIRCLE_6
END IF
IF iteration% < 3 OR BETWEEN(a%, 0, 35) OR BETWEEN(a%, 45, 72) THEN
GOSUB CIRCLE_7
END IF
GOSUB CIRCLE_8
IF iteration% MOD 2 = 0 THEN
IF a% = 10 OR a% = 70 THEN LINE (p1x%,p1y%) TO (p6x%, p6y%), c%
IF a% = 15 OR a% = 65 THEN LINE (p2x%,p2y%) TO (p5x%, p5y%), c%
IF a% = 20 OR a% = 60 THEN LINE (p3x%,p3y%) TO (p4x%, p4y%), c%
IF a% = 25 OR a% = 55 THEN LINE (p4x%,p4y%) TO (p5x%, p5y%), c%
IF a% = 35 OR a% = 45 THEN LINE (p2x%,p2y%) TO (p7x%, p7y%), c%
IF a% = 30 OR a% = 50 THEN LINE (p3x%,p3y%) TO (p6x%, p6y%), c%
END IF
SLEEP s
WHILE _MOUSEBUTTON : WEND
NEXT a%
NEXT i%
SLEEP s
WHILE _MOUSEBUTTON : WEND
NEXT iteration%
SLEEP 1.5
WHILE _MOUSEBUTTON : WEND
PAINT (0,0), 0, c%
PAINT (d%,d%), 0, c%
SLEEP 1.5
WHILE _MOUSEBUTTON : WEND
GOSUB PEN_TO_CENTER
DRAW "BU" + (d% - 1 - 75)
PAINT ( d%, POINT(1)-5 ), INT(RND * 62 + 2), c%
SLEEP 3
WHILE _MOUSEBUTTON : WEND
PAINT (0,0), INT(RND * 62 + 2), c%
SLEEP 3
WHILE _MOUSEBUTTON : WEND
PAINT (d%,d%), INT(RND * 62 + 2), c%
SLEEP 3
WHILE _MOUSEBUTTON : WEND
d% = INT( RND * 42 + 9 ) * 10
GOTO πππrun_againπππ
END
' π π π GOSUB Routines
PEN_TO_CENTER:
DRAW "BM" + d% + "," + d%
RETURN
PEN_TO_CIRCLE_1:
DRAW "BU" + (d% - 1)
RETURN
CIRCLE_1:
GOSUB PEN_TO_CENTER
DRAW "BU" + (d% - 1)
p1x% = POINT(0) : p1y% = POINT(1)
PSET (p1x%, p1y%), c%
IF p1xlast% > -1 AND BETWEEN(a%,11,70) _
THEN LINE (p1xlast%, p1ylast%) TO (p1x%, p1y%), c%
p1xlast% = p1x% : p1ylast% = p1y%
RETURN
CIRCLE_2:
GOSUB PEN_TO_CENTER
DRAW "BU" + (d% - 1 - 10)
p2x% = POINT(0) : p2y% = POINT(1)
PSET (p2x%, p2y%), c%
IF p2xlast% > -1 AND ( BETWEEN(a%, 16, 35) OR BETWEEN(a%, 46, 65) ) _
THEN LINE (p2xlast%, p2ylast%) TO (p2x%, p2y%), c%
p2xlast% = p2x% : p2ylast% = p2y%
RETURN
CIRCLE_3:
GOSUB PEN_TO_CENTER
DRAW "BU" + (d% - 1 - 20)
p3x% = POINT(0) : p3y% = POINT(1)
PSET (p3x%, p3y%), c%
IF p3xlast% > -1 AND ( BETWEEN(a%, 21, 30) OR BETWEEN(a%, 51, 60) ) _
THEN LINE (p3xlast%, p3ylast%) TO (p3x%, p3y%), c%
p3xlast% = p3x% : p3ylast% = p3y%
RETURN
CIRCLE_4:
GOSUB PEN_TO_CENTER
DRAW "BU" + (d% - 30)
p4x% = POINT(0) : p4y% = POINT(1)
PSET (p4x%, p4y%), c%
IF p4xlast% > -1 AND ( BETWEEN(a%, 21, 25) OR BETWEEN(a%, 56, 60) ) _
THEN LINE (p4xlast%, p4ylast%) TO (p4x%, p4y%), c%
p4xlast% = p4x% : p4ylast% = p4y%
RETURN
CIRCLE_5:
GOSUB PEN_TO_CENTER
DRAW "BU" + (d% - 1 - 40)
p5x% = POINT(0) : p5y% = POINT(1)
PSET (p5x%, p5y%), c%
IF p5xlast% > -1 AND ( BETWEEN(a%, 16, 25) OR BETWEEN(a%, 56, 65) ) _
THEN LINE (p5xlast%, p5ylast%) TO (p5x%, p5y%), c%
p5xlast% = p5x% : p5ylast% = p5y%
RETURN
CIRCLE_6:
GOSUB PEN_TO_CENTER
DRAW "BU" + (d% - 1 - 50)
p6x% = POINT(0) : p6y% = POINT(1)
PSET (p6x%, p6y%), c%
IF p6xlast% > -1 AND ( BETWEEN(a%, 11, 30) OR BETWEEN(a%, 51, 70) ) _
THEN LINE (p6xlast%, p6ylast%) TO (p6x%, p6y%), c%
p6xlast% = p6x% : p6ylast% = p6y%
RETURN
CIRCLE_7:
GOSUB PEN_TO_CENTER
DRAW "BU" + (d% - 1 - 60)
p7x% = POINT(0) : p7y% = POINT(1)
PSET (p7x%, p7y%), c%
IF p7xlast% > -1 AND ( BETWEEN(a%, 1, 35) OR BETWEEN(a%, 46, 72) ) _
THEN LINE (p7xlast%, p7ylast%) TO (p7x%, p7y%), c%
p7xlast% = p7x% : p7ylast% = p7y%
RETURN
CIRCLE_8:
GOSUB PEN_TO_CENTER
DRAW "BU" + (d% - 1 - 75)
p8x% = POINT(0) : p8y% = POINT(1)
PSET (p8x%, p8y%), 61
IF p8xlast% > -1 _
THEN LINE (p8xlast%, p8ylast%) TO (p8x%, p8y%), c%
p8xlast% = p8x% : p8ylast% = p8y%
RETURN