=============================================================================== PETROFF'S ORNAMENT An Anti-Self-Similar Wave Field on the Log-Polar Torus: from Numerical Instability to Infinite Zoom Technical article -- formula, visual interpretation, possible improvements and use cases Project: PETROFF's ORNAMENT (webart / chinese_gong_3) Date: 2026-11-05 Files: ornament.orig.html (first formulation) ornament.html (current formulation) titlecard.html (composite of both) =============================================================================== ABSTRACT -------- PETROFF's ORNAMENT is an interactive generative artwork. Striking a virtual gong excites a wave field whose rings nest into one another without end: each ring is a sign-inverted, down-scaled copy of the ring outside it. This article documents two formulations of the piece. The first formulation (ornament.orig.html) integrates the 2D wave equation with an explicit finite-difference scheme at a time step beyond the stability limit. We show by von Neumann analysis that the scheme amplifies the checkerboard mode by a factor of about 8.1 per step. That amplification, the L1 domain of dependence of the 5-point stencil, and IEEE-754 overflow together produce the characteristic crystalline diamond. An image-space rule then fills the overflowed "void" with nested, sign-alternating copies of the surrounding field. The second formulation (ornament.html) replaces the instability with an exact construction. The wave equation is solved on a torus in log-polar coordinates (s = ln r, theta), with an antiperiodic identification h(s + pi/2, theta) = -h(s, theta). The resulting planar field satisfies the discrete anti-self-similarity H(K z) = -H(z) with K = e^(pi/2) ~ 4.810, so it extends to infinity both inward and outward, and a camera zoom becomes a pure translation in s. We describe the rendering pipeline: log-polar lookup, a mip pyramid against aliasing at the centre, perceptual contrast compensation, a diverging colour map and continuous hue rotation. We interpret the visual features physically, and close with improvements and use cases. 1. INTRODUCTION --------------- A struck gong is a classic object of wave physics. A localised impulse spreads across a plate, reflects from the rim and interferes into standing patterns. The nodal lines of those patterns, made visible since Chladni (1787) with sand on vibrating plates, are among the oldest "ornaments" produced by physics rather than by hand. PETROFF's ORNAMENT asks a different question: what if the plate has neither a centre nor a rim? What if every ring of the pattern is a copy of its neighbour, scaled by a constant factor and inverted in sign, forever? Such a field has discrete scale invariance (Sornette, 1998). It is invariant under a discrete group of dilations, not under all dilations, and it shows the log-periodic structure familiar from Weierstrass-type functions, critical phenomena and the Droste effect (de Smit and Lenstra, 2003). The project reached this goal twice, by very different means. The first, empirical version reached it by accident of numerical instability, which makes it a useful case study in itself. The second builds the property into the geometry of the domain. Both are documented below because the title card of the project deliberately combines them. 2. NOTATION ----------- x, y planar pixel coordinates, origin at the ornament centre r, theta polar coordinates, r = sqrt(x^2 + y^2), theta = atan2(y, x) s logarithmic radius, s = ln r h wave displacement (the field) v wave velocity, v = dh/dt (called u in the original code) c2 squared Courant number, c2 = (c dt / dx)^2 Lap discrete 5-point Laplacian: Lap h[i,j] = h[i-1,j] + h[i+1,j] + h[i,j-1] + h[i,j+1] - 4 h[i,j] D angular cell size, D = 2 pi / NT L log-scale step between nested levels, L = HALF * D K scale ratio between nested levels, K = e^L 3. FIRST FORMULATION: ORNAMENT BY INSTABILITY --------------------------------------------- 3.1 The scheme The original solves h_tt = c^2 Lap h on a 300 x 300 grid restricted to a disc of radius R = 146 cells. The update is semi-implicit (symplectic) Euler, equivalent to the standard leapfrog scheme: v <- v + c2 * Lap h (inside the disc only) v <- 0.999 * v (damping) h <- h + v with c2 = SPEED^2 * 0.02 = 8^2 * 0.02 = 1.28. The gong is excited by a Gaussian pulse 1.2 * exp(-d^2 / 18) at the strike point, and the simulation advances 10 steps per second. 3.2 Von Neumann analysis Insert a Fourier mode exp(i(kx x + ky y)) into the scheme. The discrete Laplacian has the symbol -sigma, with sigma(kx, ky) = 4 [ sin^2(kx/2) + sin^2(ky/2) ], 0 <= sigma <= 8. One time step maps (h, v) by the matrix | 1 - c2*sigma 1 | | - c2*sigma 1 | whose determinant is 1 and whose trace is 2 - c2*sigma. The amplification factors lambda therefore satisfy lambda^2 - (2 - c2*sigma) lambda + 1 = 0. The mode is stable (|lambda| = 1) exactly when |2 - c2*sigma| <= 2, that is c2*sigma <= 4. For every mode to be stable we need c2 <= 4/8 = 0.5, which is the familiar 2D CFL condition c dt/dx <= 1/sqrt(2) (Courant, Friedrichs and Lewy, 1928). With c2 = 1.28 every mode with sigma > 4/1.28 = 3.125 is unstable. The worst is the checkerboard mode (kx = ky = pi, sigma = 8): lambda^2 + 8.24 lambda + 1 = 0 -> lambda ~ -8.117. The checkerboard grows by a factor of about 8.1 per step and flips sign every step. That is the pixel-scale orange/indigo checker visible in the original. 3.3 Why a diamond The scheme is explicit with a nearest-neighbour stencil. After n steps a cell can only have been influenced by cells within L1 (Manhattan) distance n: |x - x0| + |y - y0| <= n. The numerical domain of dependence is therefore a diamond, not a circle. A stable scheme hides this anisotropy, because the physical front travels more slowly than the numerical one and stays nearly round. Here the physical Courant number sqrt(1.28) ~ 1.13 exceeds the numerical limit, the unstable modes grow everywhere the stencil can reach, and the visible front is the boundary of the L1 ball. The four-fold symmetry of the ornament is the symmetry of the grid, not of the physics. 3.4 Overflow and the void Smooth pulses contain almost no checkerboard energy; the instability starts from floating-point round-off of order 1e-8. Float32 overflows near 3.4e38, so the number of steps until the first non-finite value is about n ~ ln(3.4e38 / 1e-8) / ln(8.117) ~ 51. In a headless run of the original code the first non-finite values (Infinity, then NaN once Inf - Inf appears in the Laplacian) arose between steps 45 and 60. That agrees with the estimate. The non-finite region then grows as a diamond one cell per step behind the front. 3.5 The image-space nested fill The original painter treats the non-finite region as an "inner void". Along a single ray (+x from the strike point) it measures two radii: rIn, the last non-finite cell, and rOut, the last cell with |h| > 1e-4. Every void pixel at distance d from the centre is then remapped: rho = rOut / rIn k = smallest integer with d * rho^k > rIn (k <= 10) value = (-1)^k * h(centre + rho^k * (x - centre)) This is a hand-built discrete scale invariance: the void is filled with copies of the band rIn < d <= rOut, shrunk by powers of rho and alternating in sign. It is the conceptual ancestor of the second formulation, with three caveats: (a) rho changes every frame and approaches 1 as the void catches up with the front, so the copies get thinner over time. (b) The void is an L1 diamond but the remap uses Euclidean circles. The ray along +x meets the diamond at a vertex, so the circle of radius rIn circumscribes the void. This mismatch helps produce the arrowhead and chevron motifs along the axes. (c) When a remapped sample itself lands on a non-finite cell, the painter returns the sign (+1 or -1) alone, which gives flat saturated regions. The ornament is therefore transient. It is most articulated around steps 60-100 and degenerates into a flat diamond as the instability reaches the rim. In short, the first formulation is an ornament made from numerical failure. Its look (crisp, crystalline, grid-aligned, four-fold) cannot be reproduced by any stable scheme, which is why the title card keeps it, unmodified, as the nucleus of the gong. 4. SECOND FORMULATION: THE LOG-POLAR ANTIPERIODIC TORUS ------------------------------------------------------- 4.1 Change of variables In polar coordinates the planar Laplacian is Lap = d^2/dr^2 + (1/r) d/dr + (1/r^2) d^2/dtheta^2. With s = ln r it becomes Lap = e^(-2s) ( d^2/ds^2 + d^2/dtheta^2 ). The log-polar map is conformal, so the Laplacian in (s, theta) is the flat Laplacian times a scalar factor. The piece solves the flat wave equation in (s, theta): h_tt = c0^2 ( h_ss + h_thetatheta ) - gamma h_t. (1) Mapped back to the plane, (1) is the wave equation of a medium whose wave speed grows in proportion to the radius: H_tt = (c0 r)^2 Lap H - gamma H_t, H(r, theta) = h(ln r, theta). (Earlier project notes called this "conformal invariance of the wave equation". The precise statement is the variable-speed equivalence above.) Consequence: a wavefront moves at constant speed c0 in s, so in the plane its radius changes exponentially, r(t) = r0 * exp(+/- c0 t). Disturbances grow outward and shrink inward forever. They never reach a centre (s -> -infinity) or a rim (s -> +infinity). 4.2 The domain and its identification The (s, theta) domain is a torus with two identifications: theta ~ theta + 2 pi (periodic, physical angle) h(s + L, theta) = -h(s, theta) (antiperiodic in log-scale) with L = pi/2, so the full period in s is 2L = pi. In the plane this reads H(K z) = -H(z), H(K^2 z) = H(z), K = e^(pi/2) ~ 4.8105, K^2 = e^pi ~ 23.1407 (Gelfond's constant). Every ring is the negative of the ring K times larger. This is the "inverted, down-scaled self-similar ornament" of the original, made exact and extended in both directions to infinity. The antiperiodicity is preserved exactly. The discrete operator is linear and commutes with the map T: h(s, theta) -> -h(s + L, theta), and every strike is injected as an antiperiodic pair (+A at s0, -A at s0 + L). A headless test measured max |h(s) + h(s + L)| = 0 after a minute of simulated time. 4.3 Mode structure: logarithmic spirals Eigenfunctions of (1) on this torus are h = exp( i (q s + m theta) ), m in Z, q L = (2j + 1) pi -> q in { +/-2, +/-6, +/-10, ... }. In the plane these are H = r^(i q) * e^(i m theta) = exp( i (q ln r + m theta) ), the logarithmic-spiral waves. With m = 0 they are concentric rings whose radii form a geometric sequence; with m != 0 they are equiangular spirals. The ornament is a superposition of such spirals, and pairs with opposite (q, m) interfere into the familiar rosette and petal lattices. Only odd multiples of the base log-frequency appear, which is the spectral fingerprint of the sign-flip (half-period) symmetry. The continuum dispersion relation is omega = c0 sqrt(q^2 + m^2). The scheme replaces it with omega dt = 2 arcsin( sqrt(c2) * sqrt( sin^2(q D/2) + sin^2(m D/2) ) ). 4.4 Discretisation (as implemented) Grid NU x NT = 128 x 256 cells, square in (s, theta) Cell size D = 2 pi / 256 ~ 0.02454 (in s and in radians) Level step HALF = 64 cells -> L = 64 D = pi / 2 Scheme leapfrog / symplectic Euler, wrapped stencil Courant c2 = 0.35 (< 0.5, stable) Damping v <- 0.9994 v per step Rate 180 steps per second Derived quantities: Front speed sqrt(0.35) = 0.592 cells/step = 106.5 cells/s = 2.61 units of s per second In the plane front radius multiplies by e^2.61 ~ 13.6 per second; one nested level (factor K) is crossed in ~0.6 s Decay amplitude e-folding time 1 / (180 * 0.0006) ~ 9.3 s 4.5 Excitation and symmetry A strike at planar position (r0, theta0) becomes a Gaussian on the torus, centred at (ln r0 - zeta, theta0 - phi), where zeta and phi are the camera's zoom and rotation offsets. It has sigma = 2.4 cells and is truncated at 7 cells. Because the cells are conformal, the planar size of a strike scales with its radius (sigma_planar ~ 2.4 D r0 ~ 0.059 r0). A strike near the centre is small, a strike far out is large, and every strike looks the same at its own scale. Each strike is replicated by the dihedral group D_n: n rotations by 2 pi/n, plus reflections theta -> -theta when Mirror is on. The operator commutes with rotations and reflections, so the field keeps the chosen symmetry for all time. The default is D_6 (6 rotations x 2 mirrors = 12 copies), each paired with its antiperiodic twin. Auto-strike adds a strike of amplitude 0.8 every 3-6 s, at a random angle and at a radius of 5-80 % of the screen half-diagonal. 4.6 The camera: zoom as translation A planar dilation z -> lambda z is a translation s -> s + ln lambda. The renderer samples H_view(x, y, t) = h( ln r - zeta(t), theta - phi(t), t ). Because the field is periodic in s with period pi, any zoom is seamless: zooming by K shows the same image with inverted colours, and zooming by K^2 = e^pi returns it exactly. The default "spiral dive" zooms at one nested level per 6 s, modulated by +/-35 % on a 23 s cycle and eased with a first-order lag, and rotates once every 75 s. A simultaneous zoom and rotation is a complex dilation z -> e^(a + i b) z, so the dive follows logarithmic spirals, which are the natural geodesic motions of this geometry. 5. RENDERING AND VISUAL INTERPRETATION -------------------------------------- 5.1 Per-pixel lookup For each screen pixel the renderer precomputes ln r / D, theta / D and a level of detail. Per frame it applies the camera offsets and samples the torus bilinearly with wrapping. The internal resolution is limited to about 1 megapixel; the browser scales it up to the viewport, which is harmless because the field is smooth. 5.2 The centre problem and the mip pyramid Near the centre a single pixel covers many cells. In log-polar terms one pixel spans ds = 1/r and an angle of 1/r radians (r in pixels), so cells per pixel = 1 / (r D). At r < 1/D ~ 41 px point sampling aliases into noise. Note on the earlier "dark disc": the true area average of an antiperiodic field over many levels tends to zero, which the colour map renders as its dark centre colour. A physically faithful renderer therefore produces a featureless dark disc. The disc that appeared in an intermediate version was not a bug in the physics; it was the correct pixel average. The current renderer keeps the ornament visible instead: - A mip pyramid of the torus is rebuilt every frame by 2x2 box filtering: 128x256, 64x128, ..., 2x4 (7 levels). The cells are square in (s, theta) and the map is conformal, so the filter footprint is locally isotropic in the plane. - Level of detail: lod = clamp( log2(1 / (r D)) - 0.35, 0, 6 ), with trilinear interpolation between levels. The -0.35 bias sharpens slightly. - Contrast compensation: each level l is multiplied by LG_l = min( RMS_0 / RMS_l, 3.5 ), smoothed over time. This is a perceptual, non-physical choice. It restores the contrast lost to averaging, so the nested rings stay legible down to a few pixels from the centre, which is the visual promise of "infinite inward" growth. 5.3 Colour: a diverging map with dark nodal lines The colour map is piecewise linear with a dark neutral point, for z clamped to [-1, 1]: z >= 0 : RGB = ( 40 + 215 z, 20 + 140 z, 45 ) amber z < 0 : w = 0.85 |z| RGB = ( 30, 26 + 10 w, 70 + 170 w ) indigo Interpretation: - amber = surface displaced "up" (towards the viewer) - indigo = surface displaced "down" - dark veins between them = nodal lines, where h = 0 The perceived "linework" of the ornament is therefore the nodal-line network, the same structure Chladni made visible with sand. Under H(Kz) = -H(z) the amber and indigo regions swap at each nested level, which gives the alternating, inlaid look. An automatic gain, g -> 0.9 / max|h| with exponential smoothing (factor 0.04 per frame, capped at 40), keeps the image in range as the energy decays. 5.4 Hue rotation With HUE Rotate on, the 1024-entry colour table is rebuilt every frame by multiplying each colour with the hue-rotation matrix of the W3C Filter Effects specification, i.e. the CSS hue-rotate() function. It rotates about the Rec.709 luma axis (weights 0.213, 0.715, 0.072) through 360 degrees every 40 s. The matrix preserves approximate luma, not perceived lightness or chroma. Saturated blue has low luma, so near 180 degrees the indigo half of the map becomes a dim olive (Section 7.1). 5.5 Reading the image: a visual glossary Concentric rings m = 0 log-spiral modes; spacing grows geometrically with radius. Petals / rosettes D_n-replicated strikes interfering with their mirror images; the petal count equals the symmetry order n. Teardrop fronts a circle of radius rho in (s, theta) maps to a curve stretched by e^(+rho) outward and squeezed by e^(-rho) inward, so wavefronts look egg-shaped and bulge outward. Wrapped lacework once a front exceeds pi in theta it meets itself around the circle. Once it exceeds L in s it meets its own sign-inverted twin from the next level. The fine lace comes from these self-interferences. Colour swap amber/indigo inversion between adjacent nested levels, the visible signature of H(Kz) = -H(z). Endless flow camera translation in s; nothing is created or destroyed at the centre or the edge, it is only revealed. 5.6 The title card as synthesis The title card places the unmodified first formulation (step 84, pixel-art, four-fold diamond) inside a gold-rimmed disc and surrounds it with the second formulation (8-fold mirrored field, compatible with the diamond's D_4 symmetry), sharing the same centre. Visually, the crystal of numerical instability sits inside the smooth infinite field of the exact construction. 6. THE FORMULA IN COMPACT FORM ------------------------------ Field (torus T = R/(pi Z) x R/(2 pi Z), antiperiodic under s -> s + pi/2): h_tt = c0^2 (h_ss + h_thetatheta) - gamma h_t h(s + pi/2, theta, t) = -h(s, theta, t) h(s, theta, 0) = sum_k sum_{g in D_n} A_k [ G(g(s - s_k, theta - theta_k)) - G(g(s - s_k - pi/2, theta - theta_k)) ] G(a, b) = exp( -(a^2 + b^2) / (2 sigma^2) ) (The live piece adds strikes at later times as additional impulses of the same form.) Planar ornament: H(x, y, t) = h( ln r - zeta(t), theta - phi(t), t ), H(K z) = -H(z), K = e^(pi/2) Displayed colour: C(x, y, t) = HueRot_{alpha(t)}( M( clamp( g(t) * P_{lod(r)}[H](x, y, t) ) ) ) where M is the diverging colour map, P is the contrast-compensated mip filter, g the automatic gain, alpha(t) = 360 deg * t / 40 s the hue angle, and zeta, phi the camera zoom and rotation. 7. POSSIBLE IMPROVEMENTS ------------------------ 7.1 Colour - Rotate hue in a perceptual space (OKLab/OKLCH; Ottosson, 2020) so that lightness and chroma stay constant through the cycle. This removes the olive cast at 180 degrees. - Replace the sign flip with a complex phase: use a complex field with h(s + L) = e^(i beta) h(s) and colour by phase (domain colouring). Each nested level would then be hue-shifted by beta, not just inverted, so hue rotation becomes part of the geometry instead of an overlay. - Add ordered dithering in the final quantisation to avoid banding in the dark gradients. 7.2 Numerics - Spectral solver. On a torus the FFT diagonalises (1) exactly. Each mode evolves in closed form (a damped cosine), so the grid's dispersion and anisotropy disappear, time can be scrubbed backwards and forwards, and the cost becomes independent of the time step. - Analytic antialiasing. In the spectral form the average of each mode over a pixel footprint has a closed-form attenuation, which allows exact filtering instead of a box-filtered pyramid. Contrast compensation can then become a principled spectral tilt instead of a per-level RMS ratio. - Frequency-dependent damping (e.g. gamma ~ |k|^2) to imitate real metal, where high partials die first, and to reduce the "breathing" caused by the automatic gain. - Re-project periodically onto the antiperiodic subspace, h <- (h - T h)/2, to guard against drift from float round-off in long sessions. It is not needed today, but it is cheap insurance. 7.3 Geometry: beyond log-polar - Twisted self-similarity: identify (s + L, theta + alpha) with a sign flip. The nested levels then rotate as well as scale, which gives a true Droste spiral (de Smit and Lenstra, 2003). - Two-centre (bipolar) maps w = ln((z - a)/(z - b)): two infinite sinks or sources on the canvas, nesting toward both. - Elliptic or Schottky/Kleinian uniformisations (Mumford, Series and Wright, 2002): solve the wave on a fundamental domain and render through a Mobius group to get limit-set ornaments with infinitely many nesting centres. 7.4 Physics and sound - Real gong behaviour: Chinese opera gongs show a nonlinear pitch glide (von Karman plate nonlinearity; Fletcher and Rossing, 1998). A small cubic term in (1) would let strikes bend and couple. - Sonification: an infinite zoom through a field that is self-similar in scale is the visual counterpart of the Shepard-Risset glissando (Shepard, 1964). Synthesising partials on log-frequency positions tied to zeta would produce an endlessly falling or rising gong tone, synchronised with the dive. 7.5 Performance and engineering - Move both simulation and rendering to the GPU (WebGL2/WebGPU fragment shaders; the mip pyramid maps to hardware mipmaps). The current CPU path needs about 21 ms per 1-megapixel frame, the limit of 60 fps. - For the first formulation, detect the void as a region (flood fill or distance transform) instead of along one ray, and use L1 distance in the remap so the nested copies match the diamond geometry. - Accessibility: honour prefers-reduced-motion (stop the zoom, slow the hue cycle), keep flicker well below photosensitive thresholds (it is currently slow), and add keyboard access to strikes. - Determinism: seeded RNG and a recorded strike timeline, so that any frame can be reproduced for print (the title card already does this in ?still mode). 8. USE CASES ------------ 8.1 Art and media - Generative installations, ambient displays, VJ and stage visuals: strikes can be driven by drum onsets, and the endless zoom loops without seams. - Fulldome and planetarium projection. Log-polar geometry suits the azimuthal-equidistant dome format, and an infinite dive toward the zenith is a natural fulldome motion. - Ornament design for textiles, ceramics, metalwork and architectural rosettes. The torus field is a seamless texture by construction, and D_n symmetry with mirror yields classical rosette groups. - Procedural textures for games: zoomable, tileable and scale-aware. 8.2 Education - Numerical analysis: the first formulation is a vivid demonstration of the CFL condition, von Neumann growth factors, checkerboard modes, the L1 domain of dependence of explicit stencils, and float overflow. - Complex analysis and geometry: conformal maps, the log-polar transform, zoom as translation, logarithmic spirals. - Wave physics: superposition, nodal lines, dispersion, symmetry conservation, variable-speed media. - Computer graphics: aliasing, mip-mapping (Williams, 1983) and the difference between physically correct and perceptually useful filtering. 8.3 Research and analogy - Discrete scale invariance and log-periodicity (Sornette, 1998): a tangible model of systems invariant under z -> K z only, as studied in critical phenomena, fractured materials and Efimov-type spectra. - Media with speed proportional to radius: a toy model of exponential redshift and blueshift of wave packets, related in spirit to analogue horizon models. - Visual neuroscience: the log-polar map approximates the retinotopic mapping from retina to primary visual cortex (Schwartz, 1977). The torus field is roughly what the ornament "looks like" in cortical coordinates, a possible stimulus generator for vision experiments. 8.4 Well-being and interface - Meditation and relaxation visuals: the slow spiral dive, the slow hue cycle and symmetric imagery suit breath pacing. - Loading or idle screens that never visibly repeat at a human time scale yet are cheap to compute. 9. LIMITATIONS -------------- - Not a physical gong. The medium has a radius-proportional speed and no rim; real gong modes are Bessel-type, bounded and dispersive. - The centre rendering is perceptually, not physically, faithful (Section 5.2). - CPU rendering limits resolution to about 1 megapixel at interactive rates. - Hue rotation in RGB is not perceptually uniform (Section 5.4). - The first formulation depends on IEEE-754 overflow and NaN propagation. Its appearance is reproducible in practice but is not a designed property. 10. CONCLUSION -------------- PETROFF's ORNAMENT reaches the same aesthetic goal, an ornament that nests infinitely and inverts at every level, by two routes. The first is empirical: an unstable explicit scheme whose growth factor (~8.1 per step), L1 stencil geometry and floating-point overflow produce a crystalline diamond, finished by an image-space nested fill. The second is exact: a wave equation on a log-polar torus with an antiperiodic scale identification. The planar field it produces satisfies H(e^(pi/2) z) = -H(z), its eigenmodes are logarithmic spirals, and zoom becomes translation, so inward and outward growth are unbounded by construction. Mip-filtered, contrast-compensated rendering and a slowly rotating diverging palette turn the nodal-line network of this field into the visible ornament. The construction generalises readily to complex phases, twisted (Droste) identifications, multi-centre conformal maps, spectral solvers and audio, and it supports uses from fulldome art to teaching numerical stability. REFERENCES ---------- Chladni, E. F. F. (1787). Entdeckungen ueber die Theorie des Klanges. Leipzig: Weidmanns Erben und Reich. Courant, R., Friedrichs, K., & Lewy, H. (1928). Ueber die partiellen Differenzengleichungen der mathematischen Physik. Mathematische Annalen, 100, 32-74. de Smit, B., & Lenstra, H. W. (2003). The mathematical structure of Escher's Print Gallery. Notices of the AMS, 50(4), 446-451. Fletcher, N. H., & Rossing, T. D. (1998). The Physics of Musical Instruments (2nd ed.). New York: Springer. Mumford, D., Series, C., & Wright, D. (2002). Indra's Pearls: The Vision of Felix Klein. Cambridge University Press. Ottosson, B. (2020). A perceptual color space for image processing (OKLab). Blog article, bottosson.github.io. Schwartz, E. L. (1977). Spatial mapping in the primate sensory projection: analytic structure and relevance to perception. Biological Cybernetics, 25, 181-194. Shepard, R. N. (1964). Circularity in judgments of relative pitch. Journal of the Acoustical Society of America, 36, 2346-2353. Sornette, D. (1998). Discrete-scale invariance and complex dimensions. Physics Reports, 297(5), 239-270. Strikwerda, J. C. (2004). Finite Difference Schemes and Partial Differential Equations (2nd ed.). Philadelphia: SIAM. W3C (2018). Filter Effects Module Level 1, section "feColorMatrix / hue-rotate". World Wide Web Consortium, Working Draft. Williams, L. (1983). Pyramidal parametrics. Computer Graphics (SIGGRAPH '83 Proceedings), 17(3), 1-11. APPENDIX A. PARAMETER TABLE --------------------------- Parameter Original (orig) Current ---------------------- --------------------- --------------------------- Domain 300x300 grid, disc 128x256 torus in (s, theta) R = 146 Courant c2 1.28 (unstable) 0.35 (stable) Steps per second 10 180 Damping per step 0.999 0.9994 Strike Gaussian, var 9 px^2, Gaussian, sigma 2.4 cells, amplitude 1.2 D_n x mirror, antiperiodic pairs Self-similarity image-space remap, exact, H(Kz) = -H(z), ratio rOut/rIn K = e^(pi/2) Symmetry D_4 (grid-induced) D_n selectable (default D_6) Centre treatment nested remap of void mip pyramid + contrast comp. Camera static log zoom + rotation Colour diverging amber/indigo same map + hue rotation, 40 s APPENDIX B. REPRODUCING THE MEASUREMENTS ---------------------------------------- - Growth factor: solve lambda^2 - (2 - 1.28 * 8) lambda + 1 = 0. - Overflow timing: run the original's simulate() headlessly and count non-finite cells after each step. The first appear between steps 45 and 60. - Antiperiodicity: after any run of the current version, evaluate max |h[j, i] + h[j + 64, i]|. It is exactly 0. - Frame cost: time paint() over 20 frames at about 1 megapixel; about 21 ms on the development machine (CPU, single thread). ===============================================================================