This is a top-down 2D companion to the 3D Limiting Factor Field — same underlying model, reproduced independently rather than a flattened render of the 3D scene. In 1840, Justus von Liebig observed that crop growth is not set by the average availability of nutrients — it is capped by whichever single resource is scarcest relative to what the plant needs. Adding more of an already-abundant factor does nothing until the bottleneck itself is relieved.
Growth rate = R_max × min( f(Light), f(Water), f(Nitrogen), f(Temperature) )
f(Light) = L / (L + K_L) Monod saturation, K_L = 25%
f(Water) = W / (W + K_W) Monod saturation, K_W = 25%
f(Nitrogen) = N / (N + K_N) Monod saturation, K_N = 20%
f(Temp) = exp( -((T - T_opt)/σ)² ) bell curve, T_opt = 24°C, σ = 12°C
Each factor is scored 0–1 independently (light/water/nitrogen saturate toward 1 as they become abundant; temperature peaks at an optimum and falls off on both sides — too cold or too hot both hurt). Every plant's actual growth speed uses only the lowest of the four scores — that's the "limiting factor," highlighted in red on the panel — while each of the 121 plants also carries its own small random microsite multiplier per factor, so the canopy viewed from above never looks perfectly uniform even under one set of sliders.
- Sliders — set the mean level of each of the four factors across the whole field.
- Replant field — resets every plant to a seedling and reshuffles microsite variability.
- Limiting factor — whichever bar is shortest is throttling growth; push its slider up and watch the ceiling lift, even while the other three stay unchanged.
- Drag / scroll over the field — pan and zoom the top-down view; canopy circle radius and colour (green = healthy, brown = stunted) track each plant's own height.
This is the same logic behind why a well-watered, sun-drenched field can still stall out from nitrogen deficiency, or why a nutrient-rich greenhouse plant stops growing the moment the thermostat drifts out of range.