u(t) is called 60 times per second.
t: Elapsed time in seconds.
S: Shorthand for Math.sin.
C: Shorthand for Math.cos.
T: Shorthand for Math.tan.
R: Function that generates rgba-strings, usage ex.: R(255, 255, 255, 0.5)
c: A 1920x1080 canvas.
x: A 2D context for that canvas.
Squashed each ant into a 16bit bit field, [X,Y,D] = 0b 111111 111111 0111. These ants were generated with: X=7,Y=7,D=0,[[-X,-Y,3+D],[+Y,-X,2+D],[+X,+Y,1+D],[-Y,+X,0+D]].map(([X,Y,D])=>X+60<<10|Y+32<<4|D%4<<0)
Thanks :) a>>4 is the cell index of a 64x64 grid. the lower 4 bits are for the ant's direction so shifting them off to the right leaves only the 12 X and Y bits (see above). u is just an object, so all of these indicies will be undefined initially, but undefined is falsey and bitwise operators coerce falsey into 0, i.e undefined ^ 1 == 0 ^ 1 == 1, in otherwords XOR just treats all of the initial cell values as 0. Using the assignment version ^= means we toggle each cell between 0 and 1 each time an ant passes through it (which is part of the langton ant rules).
u(t) is called 60 times per second.
t: elapsed time in seconds.
c: A 1920x1080 canvas.
x: A 2D context for that canvas.
S: Math.sin
C: Math.cos
T: Math.tan
R: Generates rgba-strings, ex.: R(255, 255, 255, 0.5)