## Fields

- stress line cracks

Imagine a field of mud or a clay tablet drying in the sun. Cracks appear at random as the mud shrinks. This program limits cracks to either horizontal or vertical. The crack however must choose the shortest distance and must not run parrallel too close to a previous crack. Longer cracks are also wider than shorter cracks.
The result is a field of random vertical and horizontal lines. The procedure 'Colorize' fills in a few areas with color.

To New
# set default screen, pen and turtle values
ResetAll SetScreenSize [400 400] HideTurtle
SetSC Black SetPC Green SetPS 1 PenUp
End

To DrawTile
SetPos [-190 -190]
PenDown Repeat 4 [Forward 380 Right 90] PenUp
Home Fill
End

To Crack
Make "Point RandomPoint SetPos :Point
If 0=(Item 2 FindColor Pos) [Make "OnLine :OnLine+1 Stop]
Make "PosList NESW
Make "DistV (Item 1 :PosList) + (Item 3 :PosList)
Make "DistH (Item 2 :PosList) + (Item 4 :PosList)
If (:DistV < :DistH) [
If And ((Item 2 :PosList) > 6) ((Item 4 :PosList) > 6) [LineV]] [
If And ((Item 1 :PosList) > 6) ((Item 3 :PosList) > 6) [LineH]]
End

To NESW
#Return North East South and West distances
Make "PosList []
For [N 0 3] [
Make "Dist 0
SetPos :Point SetH :N*90
While [255=(Item 1 FindColor Pos)] [
Make "Dist :Dist + 1 Forward 1]
Make "PosList LPut :Dist :PosList]
Output :PosList
End

To RandomPoint
Output List (Random 360)-180 (Random 360)-180
End

To LineH
SetPos :Point SetH 90 Forward (Item 2 :PosList)-1
SetPW Integer :DistH/32 PenDown Back :DistH-2 PenUp
End

To LineV
SetPos :Point SetH 0 Forward (Item 1 :PosList)-1
SetPW Integer :DistV/32 PenDown Back :DistV-2 PenUp
End

To Colorize
Repeat 64 [
SetPos RandomPoint
If 255=(Item 1 FindColor Pos) [
SetPC (List (Integer 100 + Random 127) 127 0)
Fill] ]
End

To Go
New SetPC Orange DrawTile
Make "OnLine 0 SetPC Black
While [:OnLine < 64] [Crack]
Colorize
End

Fields

Procedures blue
Variables pink