Georg Nees (1926–2016) was a pioneer of generative art. His piece “Schotter” (gravel) from 1968 displayed a rectangular array of squares with the position of each square becoming more random as the piece progressed.
The BASIC code for this video is based on Processing code by Jim Plaxco, http://www.artsnova.com/
The Tektronix 4010 display simulator is by Rene Richarz, https://github.com/rricharz/Tek4010
The BASIC interpreter with Tektronix graphics support is Matrix Brandy BASIC maintained by Michael McConnell, https://github.com/stardot/MatrixBrandy
(Higher-quality video at Georg Nees’ “Schotter”, reproduced on a simulated Tek4010 display at YouTube.)
100 REM Georg Nees "Schotter" reproduction - scruss, 2019-11
110 REM based on Processing 3 code by Jim Plaxco, www.artsnova.com
120 :
130 scrn_wd% = 2048: REM fixed screen size, unlike Processing
140 scrn_ht% = 1560
150 columns% = 12
160 rows% = 22
170 sqsize% = FN_min(scrn_wd% / (columns% + 4), scrn_ht% / (rows% + 4))
180 padding% = 2 * sqsize%
190 randstep = 0.22
200 randsum = 0.0
210 randval = 0.0
220 dampen = 0.45
230 :
240 SYS "Brandy_TekEnabled", 1
250 A$=GET$: REM PLOT 4, 0, 0: PLOT 5, 0, 0
260 FOR y% = 1 TO rows%
270 randsum = randsum + (y% * randstep)
280 FOR x% = 1 TO columns%
290 randval = RND(1) * (2 * randsum) - randsum
300 PROC_square((scrn_wd% / 2) - (sqsize% * columns% / 2) + (x% * sqsize%) - (sqsize% / 2) + INT(randval * dampen), scrn_ht% - (padding% + (y% * sqsize%) - (sqsize% / 2) + INT(randval * dampen)), sqsize%, randval)
310 NEXT x%
320 NEXT y%
330 PLOT 4, 0, 0: PLOT 5, 0, 0
340 END
350 :
360 DEF PROC_square(cx%, cy%, side, angle)
370 LOCAL r, i%, pm%
380 pm% = 4: REM plot mode - move = 4, draw = 5
390 r = (side / 2) / (SQR(2) / 2)
400 FOR i% = 0 TO 4
410 PLOT pm%, cx% + r * COS(RAD(angle + i% * 90 + 45)), cy% + r * SIN(RAD(angle + i% * 90 + 45))
420 pm% = 5
430 NEXT i%
440 ENDPROC
450 :
460 DEF FN_min(a%, b%) IF a% < b% THEN =a% ELSE =b%
Update: I get a mention here: Schotter – Georg Nees – Part 2!