Commits on 9 Oct 2026
Driven plate: mode map (every mode's energy against time, averaged over time bins, log colour, hover readout); energy chart reads the same averaged bins
Jeremy Magland committed
bedc4d4Plate: remove the curvature (domed rest shape) and its cross-section, to keep the plate simple; Parameters stays in the right column
Jeremy Magland committed
2c9a594Driven plate: new app, rectangular simply supported von Kármán plate driven in one mode (modal force in phase with the mode's velocity, energy-target controller on a log ramp), height map, energy chart, perturbation option
Jeremy Magland committed
39bccd2Plate: Parameters back in the right column; true-scale cross-section under the height map showing the dome and the thickness
Jeremy Magland committed
ecc198bPlate: optional curvature (domed rest shape, Marguerre shallow shell): stretching measured from the rest shape, computed modes with the curvature stiffness, generalized nonlinear scale
Jeremy Magland committed
e7f0b54Note renderer: step at the stability step and read the signal between steps by cubic interpolation (no longer at least 4 steps per audio sample); plate notes 1.4-2.3x faster
Jeremy Magland committed
0394e11Plate: Lyapunov exponent (shadow plate; real-time chart in a new Real time card, note chart and λ vs E off by default); Parameters folded under the plate
Jeremy Magland committed
ad9866bPlate: remove membrane tension (did not sound like a drum; drums later); clamped edges stay
Jeremy Magland committed
e17746cPlate: clamped edges (clamped 13-point stencil, computed modes) and a general membrane tension T for held edges; mallet unchanged
Jeremy Magland committed
197feb9Plate: stretching with free edges (free in-plane edge, clamped stress function by sine solves + Woodbury); free plate moved to grid vertices (edge masses on the edge, half/quarter mass), second-order bending and stretching; mallet takes per-mass masses
Jeremy Magland committed
b2016c6Plate: free edges (full bending energy with Poisson term, rigid motions removed, modes by symmetry blocks with a new Householder/QL eigensolver); stretching off when free for now
Jeremy Magland committed
c86ceb3Plate: von Kármán stretching (stress function by sine transforms, exact gradient), thickness h sets it (default 5 cm), step from the strike energy, nonlinear scale
Jeremy Magland committed
6a89fa0Plate: new app, square simply supported linear plate on a grid (exact sine modes, mallet or kick at a point, height map, sped-up note with spectrogram)
Jeremy Magland committed
1763884Beam: free-free ends in the page (Ends 'free'; rigid part of strikes removed and reported; mode displays by Modes.count; bending offsets for ghost and Lyapunov shadow; drawing without supports)
Jeremy Magland committed
a171f3cBeam: free-free ends in the physics (rigid motions removed by projection, modes without the rigid pair); not yet in the UI
Jeremy Magland committed
ddfbc84Beam defaults: 16 masses, frequency-dependent loss on (τ top 200 s), mallet strike (M 1 kg, K 1000)
Jeremy Magland committed
e605cb4Beam: mallet strike (Hertz contact, mass M and stiffness K in Parameters; shared contact routine in src/common/mallet.ts); hammer shape factored out; kick stays the default
Jeremy Magland committed
5b795e3Beam: strike and listening at positions along the beam (m), hammer blow of fixed physical width, so both mean the same at any N; N = 8 unchanged
Jeremy Magland committed
8ce184cAnti-alias filter for rendered notes (beam, fput-chain): 4x oversampling, Kaiser FIR low-pass to 0.42 fs, decimation; beam warning now says modes above the passband are filtered out
Jeremy Magland committed
0172972Beam: integrator step 0.2 / omega_eff (was 0.03): 6.5x fewer steps, top-mode pitch error 2.9 cents, statistically equivalent notes
Jeremy Magland committed
1115407Beam: Masses refines the same beam (parameters for 8 masses, scaled with the spacing), so the low modes, decay times and note length stay put as N grows
Jeremy Magland committed
fcad6beBeam: frequency-dependent loss (dashpots alongside the springs, set by the top-of-band decay time τ top, default off); per-mode decay times in the derived values
Jeremy Magland committed
462e79cBeam README: 1:2 internal resonance between modes 1 and 3 (Kirchhoff, clamped, h = 0.38)
Jeremy Magland committed
e39a676Beam README: the near 2:1 at h = 0.2 is not a resonance (mode 2 antisymmetric)
Jeremy Magland committed
2079531Beam: draw the rest shape and the beam at rest shape plus displacement
Jeremy Magland committed
82fcd7fBeam: curvature (rise h of a stress-free curved rest shape, default 0); stepFor safe for k3 = 0
Jeremy Magland committed
551b7a9Chart legends fit left of the range text; the rest counted as +n
Jeremy Magland committed
64125ddSpectrogram: log frequency axis by default with a 'log f' chip for linear; rows show the loudest bin in their band; mode lines decided per line
Jeremy Magland committed
63e5e6eBeam step 5: λ vs E scatter over notes
Jeremy Magland committed
90c1386Beam step 4: ghost and Separation chart; ghost controls shared in src/common/ghost.ts, used by all three apps
Jeremy Magland committed
8776c93Beam step 3: mode bars, mode history, mode energies, note's mode heat map; mode history and mode bars shared in src/common/
Jeremy Magland committed
407a5c8Beam step 2: Lyapunov exponent (real-time chart, note chart with energy); render loop shared in src/common/note-render.ts, used by fput-chain (output unchanged)
Jeremy Magland committed
f8def18Beam app (step 1): beam with bending, clamped/pinned/cantilever ends, local or Kirchhoff stretching; sped-up note with spectrogram. Note player, mute button, formats and canvas sizing in src/common/
Jeremy Magland committed
8cbfe83Section panel in src/common/section-panel.ts; each app configures it. Pendulum section slider on a log scale (E_top/1000 to 2 E_top)
Jeremy Magland committed
8874f6dSection orbits, worker and atlas in src/common/; each app supplies sectionOf(P)
Jeremy Magland committed
d063b02