--- title: "Tracks" id: 72622 type: "computer_media" slug: "tracks" url: "http://localhost/computer_media/tracks/" markdown_url: "http://localhost/computer_media/tracks.md" published_at: "2026-10-26T23:19:35+00:00" modified_at: "2026-10-26T23:19:35+00:00" author: "David Anderson" featured_image: url: "http://localhost/wp-content/uploads/2026/10/tracks-2.png" excerpt: "Plots Julia-set fractal curves for a complex constant you choose, by running the logistic map backwards with a random choice of square root at each step." post_tag: - name: "Downloadable" slug: "downloadable" taxonomy: "post_tag" url: "http://localhost/tag/downloadable/" - name: "TS 2068" slug: "ts2068" taxonomy: "post_tag" url: "http://localhost/tag/ts2068/" model: - name: "Timex/Sinclair 2068" slug: "ts-2068" taxonomy: "model" url: "http://localhost/model/ts-2068/" genre: - name: "Mathematics" slug: "mathematics" taxonomy: "genre" url: "http://localhost/type/mathematics/" media_type: "Program" download_url: "https://archive.org/download/timex-sinclair-software-archive/Tracks%20%28198x%29%28-%29%28TS2068%29%28US%29%28Program%29.zip" tsrun_member: "Tracks (198x)(-)(TS2068)(US)(Program)/Tracks (198x)(-)(TS2068)(US)(Program).tap" mediadate: "198x" images: - url: "http://localhost/wp-content/uploads/2026/10/tracks-2.png" - url: "http://localhost/wp-content/uploads/2026/10/tracksb-3.png" media_type_tags: "Mathematics" license: false --- # Tracks Draws fractal curves point by point on a black screen. You enter a complex constant lambda as two numbers (real part, then imaginary part) and a scale; the larger the scale number, the smaller the picture. The program then runs the map z → λz(1−z) backwards, picking one of the two square roots at random each step, and plots every point it lands on. The points settle onto the boundary of the map’s Julia set, so a dragon- or ring-shaped outline slowly fills in. It runs until you press BREAK; the REMs warn that a picture can take an hour. The program is saved as “Tracks”. Its REMs explain the prompts and say that the suggested input 3, 0, 3 “does make a circle as stated in the article in SYNTAX”, so it is a type-in from an article in the SYNTAX newsletter; the author is not named. This copy comes from a Larken disk of magazine type-ins. ## Program Analysis ### Structure - Lines 5–8: REMs explaining the inputs. - Lines 10–180: set the screen centre (127, 88) and a starting point, read the inputs, discard the first ten points, then loop forever: plot, iterate. - Line 1000: complex square root of `x+jy`. - Line 2000: replaces lambda with 4/lambda once, at input time. - Line 3000: complex multiply. - Line 4000: one backward step: multiply by 4/lambda, subtract from 1, take the root, choose its sign at random (`IF RND<0.5`), and halve 1 minus the root. - Lines 7000–7060: a leftover random-number test that is never called. ### Notable Techniques - Complex arithmetic is done in separate real and imaginary variables with small subroutines, a common approach in BASIC fractal programs of the time. - The random choice of root is the standard way to draw a Julia set by inverse iteration: the two branches together cover the whole boundary. ### Potential Issues - A small scale number with a large set can put points off the screen, which appears to stop the program with an “Integer out of range” error at `PLOT`. - Lines 4020 and 4050 form 1−z as `x=1-x` without changing the sign of `y`, so for complex lambda the steps strictly work on the complex conjugate. The pictures are still Julia-type curves, but they may be mirror images of the textbook ones. - There is no way out of the plotting loop except BREAK. This program came from a Larken disk and was converted to run from tape: the LKDOS save and load lines and the LOGICALL load were removed, and it is saved without variables. It was tested in ZEsarUX with lambda 3, 0 at scale 3 and lambda 1, 1.5 at scale 2. ## Source Code ``` 5 REM This program plots patterns on a black screen. Sometimes it takes an hour to complete. 6 REM In reply to "What is lambda?", enter the first number and key ENTER then enter second number and key ENTER." 7 REM In repy to "scale?", enter another number and key ENTER. The size of the picture varies inversely to the number entered. 8 REM A suggested try of 3, 0, 3 does make a circle as stated in the article in SYNTAX. 10 LET cx=127: LET cy=88 20 LET x=0.50001: LET y=0 100 GO SUB 5000 110 PAPER 0: INK 3: CLS 120 FOR i=1 TO 10: GO SUB 4000: NEXT i 140 GO SUB 6000 160 GO SUB 4000 180 GO TO 140 999 STOP 1000 REM Square Root of (x+jy) 1005 LET t=y 1010 LET s=SQR (x*x+y*y) 1020 LET y=SQR ((-x+s)/2) 1030 LET x=SQR ((+x+s)/2) 1040 IF t<0 THEN LET x=-x 1050 RETURN 2000 REM Four Over lx+jly 2010 LET s=lx*lx+ly*ly 2020 LET lx=+4*lx/s 2030 LET ly=-4*ly/s 2040 RETURN 3000 REM x+jy Times lx+jly 3010 LET tx=x: LET ty=y 3020 LET x=tx*lx-ty*ly 3030 LET y=tx*ly+ty*lx 3040 RETURN 4000 REM Function of x+jy 4010 GO SUB 3000: REM *lambda 4020 LET x=1-x 4030 GO SUB 1000: REM Take Root 4040 IF RND<0.5 THEN LET x=-x: LET y=-y: REM Choose Root to Plot 4050 LET x=1-x 4060 LET x=x/2: LET y=y/2 4070 RETURN 5000 REM Get Values 5010 CLS 5020 INPUT "What is lambda? (x,y) ";lx,ly 5030 GO SUB 2000 5040 INPUT "What is scale? ";sc 5050 LET sc=2*cx/sc 5060 RETURN 6000 REM Plot x,y 6010 PAPER 0: INK 7: PLOT sc*(x-0.5)+cx,cy-sc*y 6020 RETURN 6999 STOP 7000 REM RND test 7010 LET zx=140 7020 LET zy=96 7030 LET dx=20*RND 7040 LET dy=20*RND 7050 PRINT zx+dx,zy+dy 7060 GO TO 7030 7099 STOP 9000 SAVE "Tracks": PRINT ''"Press any key to VERIFY ": PAUSE 0 9010 VERIFY "Tracks" 9992 SAVE "Tracks.B1" LINE 1 9998 REM was LKDOS-only ```