**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%
```