DevTools Logo
All posts

Automata, Terrain, FFT, 3D Math & CSV Profiling Guide

September 5, 2026 · DevTools

cellular-automata
fft
3d-math
csv
noise

Emergence, signals, geometry, and messy real-world data: one bit of local rule produces Sierpiński triangles, layered noise becomes terrain, a time series reveals its hidden frequencies, matrices chain into scenes, and a CSV confesses its null ratios. These five tools explore that arc: Wolfram 1D Automata, Perlin & Simplex Terrain, FFT Decomposition, 3D Affine Transform Visualizer, and CSV Type Inference Profiler.

One rule, infinite behavior: elementary cellular automata

ruleToBits decodes any rule 0–255 into its eight Wolfram-ordered outputs (neighborhoods 111 down to 000), and evolveAutomata applies nextCell row by row from a single center seed, with periodic or fixed-0/fixed-1 boundaries up to 500 cells wide and 500 generations. The presets are the greatest hits: rule 30 for chaotic growth, rule 90 for the Sierpiński triangle, rule 110 for universal complex behavior, and rule 184 for traffic flow. Boundary mode matters more than it looks — periodic edges wrap gliders around while fixed-0 walls absorb them, so the same rule can read as chaotic or orderly depending on your choice.

// Sierpiński triangle from one seed cell
evolveAutomata({ rule: 90, width: 101, generations: 50, boundary: "fixed-0" });

Compare rules 30 and 90 side by side: both start from identical seeds, yet one decorrelates into noise while the other draws perfect nested triangles.

From noise to terrain, from signal to spectrum

perlinNoise2D and simplexNoise2D build gradient noise over a seeded permutation table, and fractalNoise2D layers octaves with lacunarity and gain controls. generateTerrain maps heights through fixed thresholds — water below 0.38, sand, grass, rock, snow above 0.86 — with classic, sunset, and monochrome palettes. Because seeds normalize deterministically, the same seed always rebuilds the same map. On the signal side, fft is an iterative radix-2 Cooley–Tukey transform that requires power-of-two lengths and never pads or mutates your input; ifft round-trips back, generateSyntheticSignal composes test tones from frequency/amplitude/phase components, and detectPeaks picks spectral maxima out of the bins. Feed a two-tone signal in, verify both peaks appear at the right bins, then add noise and watch the floor rise.

Matrices you can see, CSVs you can trust

composeTransforms multiplies translate, rotateX/Y/Z, scale, and skew matrices into a single 4×4 chain applied to a wireframe cube, with inverseMatrix and determinant available for sanity checks. Order is the lesson: translate-then-rotate spins the cube in place and carries it away from the origin, while rotate-then-translate orbits it around the origin. Skew takes XY/XZ/YZ angles for shear effects most tutorials skip. Then back to earth: parseCsv handles quoted cells, escaped quotes, and custom delimiters, and profileCsv classifies every cell as integer, float, boolean, date, email, string, or null — reporting per-column inferred types, null ratios, unique counts, min/max/mean, and top values.

Column smellProfiler signalAction
Mixed "12" and 12inferred type mixedNormalize before import
40% nullshigh null ratioDecide: drop or impute
Dates as stringstype stringFix the exporter format

Sample large files with sampleRows first — profiling a preview is instant, and the full pass only matters once the schema looks right.

Try Them