These are a selection of line drawings made with very basic turtle graphics algorithms. The algorithms describe how the turtle should update its position and orientation on successive iterations. The basic structure in code is:
	for(int i=0; i<20000; i++){
		move(expression 1);
		turn(expression 2);
moves turtle forward x units
turns turtle x degrees
iteration number
returns a uniform random number in [0,1]
returns a uniform random number in [-1,1]
returns true with a probability of x

While randomness generally produces pleasing results, I find that non-random algorithms often produce more interesting structure. Randomness produces figures with a satisfying "spread", however, the overall structure is typically very uniform and lacks sufficient variety at micro- and macro-scales. The most satisfying patterns seem to lie on the border of predictability and unpredictability. With randomness, it is easy to produce unpredictable results, but difficult to produce repeating and symmetrical patterns.

Spiral A

move(1); turn(i*12.34567);

Spiral B

move(1); turn(i*1.001);

Spiral C

move(1); turn(i*14.001);

Ornament A

move(1); turn(i*7030307 % 36 + 11);

Ornament H

move(1); turn(i*12345678 % 360);

Bug Pray

move(1); turn(i*846728391 % 360);

Biostrand A

move(1); turn(i*84622839 % 36);

Biostrand B

move(1); turn(i*84622839 % 44);

Biostrand C

move(1); turn(i*6906713 % 36);

Biosystem A

move(1); turn(i*9015109 % 36 + 17);

Spiro A

move(1); turn(i*i*179 % 36 + 5);

Spiro B

move(1); turn(i*i*193 % 36 + 5);


move(1); turn(rng.uniform()*36);


move(1); turn(rng.prob(0.9) ? 179 : 10);

Random Walk

move(1); turn(rng.uniform()*360);

Random Pentagonal Walk

move(1); turn(rng.uniform(5)*72);

Random Walk on Defective Grid

move(1); turn(rng.uniform(4)*90 + 0.1);

Square Walk

move(1); turn(rng.prob(0.9) ? 89 : 10);

Furry Walk

move(1); turn(rng.uniformS()*10 + 180);

Patterns In Chaos C

move(1); turn(i*i*414640 % 20);

Patterns In Chaos D

move(1); turn(i*i*414650 % 20);