Drag anything.
how many terms
mirror or no mirror
how hot the kiln
On a wall in a valley under the Krkonoše.
Rebuilt from the equation.
Source: the author's own photograph, data/tile_single.jpg. The tile is Czechoslovak, 15 × 15 cm.
Put the origin on the tile's four-fold centre. A real image with C4 symmetry there has purely real Fourier coefficients — reality gives F(−k) = conj F(k), C4 gives F(−k) = F(k), and nothing imaginary survives. Largest imaginary part found: 2.6 × 10−17.
Derived and checked in src/fourier.py.
| rotation | mirror | ||
|---|---|---|---|
| 90° | +0.536 | vertical | +0.158 |
| 180° | +0.480 | horizontal | +0.189 |
| 270° | +0.536 | diagonal | +0.169 |
| shifted 37 px | +0.120 | antidiagonal | +0.190 |
| shuffled | −0.002 |
Mirrors sit at the level of a meaningless shift. The group is p4.
Measured by src/symmetry.py. Group names follow Schattschneider, The plane symmetry groups: their recognition and notation, Amer. Math. Monthly 85 (1978) 439–450; and International Tables for Crystallography, Vol. A.

χ = 0.199 — the tile as measured.

χ = 0 — the same coefficients with amn = anm forced.
p4 has no mirrors, so amn and anm are free to differ. Forcing them equal adds the four mirrors, which turns the group into p4m. The tendrils lose their direction of curl and the motif becomes mirror-symmetric.
| t | χ | mirror corr. | rot 90° |
|---|---|---|---|
| 0.00 | 0.000 | 1.000 | 1.000 |
| 0.25 | 0.014 | 0.393 | 1.000 |
| 1.00 | 0.199 | 0.254 | 1.000 |
| 1.50 | 0.399 | 0.237 | 1.000 |
Measured by src/chirality.py.
Almost all the handedness appears in the first fifth of that slider. Past the tile, χ doubles and the picture barely moves. Whether a larger χ looks more twisted is not measured and not claimed.
Generations 0, 1, 3, 8, 20, 60. Perimeter 40 744 → 6 210; 166 ink regions → 13.
A real firing is the first three steps of that third slider — across the plausible Ea, one high firing gives ℓ between 0.007 and 0.29 mm. One firing barely touches the tile. Curvature flow has no non-trivial fixed point, so left alone it does not preserve a pattern, it removes one.
Scheme: Merriman, Bence & Osher, Diffusion generated motion by mean curvature, UCLA CAM Report 92-18 (1992); also in Computational Crystal Growers Workshop, ed. J. E. Taylor, AMS (1992) 73–83. Run here by src/kiln.py; the firing schedules and diffusion lengths by src/scales.py.
The last 9 % costs three times what the first 90 % did. Agreement is intersection-over-union against the thresholded photograph; counted by src/build_assets.py.
A large count could just mean cosines are a bad basis for line art. They are global: every coefficient is nonzero because the tile has edges, and an edge costs a power-law tail whatever is drawn. So the same picture was priced a second way. src/trace.py already reduces the ink to a skeleton; give each point a width measured off the ink, draw it back, and score it with the same intersection-over-union. Both sides counted in free real numbers.
| free numbers | 291 | 690 | 1 710 | 3 900 | 9 399 | 21 411 | 44 877 |
|---|---|---|---|---|---|---|---|
| cosines | 0.54 | 0.64 | 0.72 | 0.86 | 0.93 | 0.97 | 0.99 |
| strokes | 0.16 | 0.29 | 0.45 | 0.59 | 0.68 | 0.74 | 0.77 |
1 710 numbers each. Cosines on the left at 0.72, strokes on the right at 0.45.
Cosines win at every budget, and by the widest margin at the smallest ones. Two reasons, both measured. Strokes have a floor: the skeleton breaks into 7 411 fragments, each needing two endpoints, so 44 466 numbers is the least that draws all of them, and going below it means discarding whole strokes rather than describing them more coarsely. And strokes have a ceiling of 0.77, because thinning discards the interior of every solid area and every junction, and no number of control points puts those back.
So 62 815 is not an artefact of the basis. It is the cheapest of the two representations tried, at every fidelity.
Measured by src/strokes.py. Skeleton by Zhang–Suen, simplification by Douglas–Peucker, widths from an exact Euclidean distance transform (Felzenszwalb & Huttenlocher). Two earlier versions of the stroke side scored worse and were wrong, not informative: one width per stroke underfilled to 0.141 ink against the reference's 0.209, and a Chebyshev distance transform overfilled to 0.235. Both are recorded in the module.
Someone asked whether the tile is a fractal. The question has a measurable answer.
A fractal is a shape whose outline is equally complicated at every magnification. To test that, cover the outline with a grid of boxes of side ε and count how many boxes contain a piece of it. Call that count N(ε). Then repeat with smaller boxes.
That last condition is the one usually skipped. Fitting a single D through all box sizes at once gives 1.34 for this tile, which sits between 1 and 2 and looks like a fractal result. Measuring D separately in each range of box sizes gives something else:
Box-counting dimension, measured separately in each range of box sizes.
The tile's value is not constant. It is 0.90 for boxes of 1–2 px and 1.95 for boxes of 64–128 px. The Koch curve, which is a fractal, stays between 1.26 and 1.43 over the same range. So 1.34 is an average of a rising quantity, not a property of the shape.
The rise has a cause that is not roughness. A box of 1–2 px sits on one edge of one painted stroke, and an edge is a line, so D ≈ 1. A box of 128 px is wider than the gaps between strokes, so nearly every box contains some paint and the count grows like an area, so D ≈ 2. Every dense pattern of ordinary smooth curves behaves this way.
The dashed line confirms it. That is this same tile rebuilt from its cosine series and thresholded again. A finite sum of cosines is analytic, so its contours are smooth curves with D = 1 by construction. It produces the same rise, and the same 1.34 under a single fit.
Magnification is a symmetry, so it can be tested the way the mirrors were: correlate the tile with a magnified view of itself about the four-fold centre.
| magnified by | for comparison | ||
|---|---|---|---|
| × 1.19 | +0.172 | rotation 90° | +0.536 |
| × 1.41 | −0.020 | mirror | +0.158 |
| × 2.00 | +0.070 | shifted 37 px | +0.120 |
| × 2.83 | −0.030 | shuffled | −0.002 |
| × 4.00 | −0.028 |
+0.120 is what a 37 px shift scores, and a shift means nothing. No magnification beats it. The 90° rotation the tile does have scores +0.536.
The answer is no, and it was already fixed before any of this was measured. The group is p4, whose operations are translations by a whole tile and quarter turns; magnification is not one of them. And f is a sum of finitely many cosines, so the boundary f = ½ is a smooth curve for any number of terms.
A procedure that returns no is only useful once it has been shown to return yes. The Koch curve above is one such check. A closer one is to take the tile, change the single property it lacks, and change nothing else.
The tile's series stops at 62 815 terms, so the pattern has a smallest feature. Remove that by adding the motif back at every magnification, each copy smaller by a whole-number factor b and weaker by b−H:
Measured with the same code, on the motif alone and on the stacked version:
| box size, px | 1–2 | 2–4 | 4–8 | 8–16 | 16–32 | 32–64 | 64–128 |
|---|---|---|---|---|---|---|---|
| the motif alone | 0.87 | 0.94 | 0.96 | 0.99 | 1.02 | 1.05 | 1.07 |
| stacked, H = 0.70 | 0.94 | 1.08 | 1.22 | 1.26 | 1.28 | 1.36 | 1.35 |
| Koch curve | 1.25 | 1.26 | 1.28 | 1.28 | 1.36 | 1.33 | 1.50 |
The motif alone gives 0.96–1.07: constant, and equal to 1. Stacked, it gives 1.22–1.36: constant, and equal to the 2 − H = 1.30 the construction was set up to produce. The same measurement that rejected the tile accepts this. That is the only reason it was built.
how far the boundary is displaced
At 0 px this is the tile, unchanged. Each step adds displacement at every scale at once, in the proportion b−jH that the equation fixes. H = 0.50 throughout, so only the amount changes, never how it is divided between scales.
The first version applied the copies to the whole image, including the interiors of solid areas. A perturbation of size p moves a boundary by p / |∇f|, and |∇f| is near zero inside a solid area, so the interiors broke into holes. Multiplying the perturbation by |∇f| first makes the displacement the same everywhere: the boundary moves, the interior does not.
Applied everywhere. D ≈ 1.3, and the drawing is gone.
Weighted by |∇f|. Same construction, same D.
The second result is a limit, not a mistake. The equation fixes the displacement at scale L at (L/L₀)H times the displacement at the largest scale. Detail at 2 px therefore requires 27H times as much displacement at 256 px. Detail at small scales cannot be added by itself. Adding it only at small scales would give the pattern a smallest feature again, which is the property that made the tile not a fractal.
Measured by src/fractal.py; built by src/fractalise.py. Sources: Mandelbrot, How Long Is the Coast of Britain?, Science 156 (1967) 636–638. Falconer, Fractal Geometry, Wiley (1990), ch. 2, for the box-counting dimension. Berry & Lewis, On the Weierstrass–Mandelbrot fractal function, Proc. R. Soc. Lond. A 370 (1980) 459–484. Matsushita, Ouchi & Honda, On the fractal structure and statistics of contour lines on a self-affine surface, J. Phys. Soc. Jpn. 60 (1991) 2109–2112, for D = 2 − H. A third test, the high-frequency spectral slope after Porod, Kolloid-Z. 124 (1951) 83–114, gave −1.85 for the tile, −1.80 for a real fractal and −2.01 for a smooth boundary. It does not separate the cases and decides nothing, and is reported rather than dropped.
Zwiebelmuster has five motifs: bamboo, aster, peony, peach, and the “onion”. Audited against a marked Meissen (Teichert) plate, this tile has one of them.
| canonical motif | on this tile |
|---|---|
| aster, with stippled halo | present |
| hooked stems, serrated leaves | present |
| bamboo stalk | absent |
| peach | absent |
| the “onion” | absent |
Motif list and audit: the five canonical Zwiebelmuster motifs as given by the Meissen Porcelain Museum, compared element by element against a marked Meissen (Teichert) plate and against this tile. Correlations by src/symmetry.py.
It kept the flowers and dropped every fruit — the motifs the pattern is named for. Not Zwiebelmuster, then: a derivative, redrawn for printing and rearranged four-fold.
The tile itself is Czechoslovak, 15 × 15 cm, 4 mm. An identical one is sold second-hand as původní obkládačky vzor cibulák; in Czech that name covers the whole blue-on-white floral family. Correlated against it: rotations +0.238, mirrors +0.097 — same tile, same handedness.
| before 1722 | Kangxi blue-and-white, China. The flowers are asters and tree peonies, mudan. |
| 1730s | Meissen. Höroldt adapts the motifs from a Chinese bowl. Date disputed: the Meissen museum says c. 1730, 1739 is most often quoted, Czech sources say 1738–39. |
| Painters take the fruit for onions. Which fruit is still unsettled — a Chinese melon per the Meissen museum, a pomegranate per Czech sources. | |
| before 1800 | Other factories are already copying it. |
| 1885 | Dubí. Czech production begins, and hand-painting is replaced by underglaze printing from steel plates. |
| 1895 | Bernard Bloch buys the works and adds wall tiles, so the pattern is printed on tiles as well as tableware. |
| today | RAKO sells a Cibulák tile, decor fired at 820 °C. |
Sources: Meissen Porcelain Museum; cs.wikipedia Cibulák; kudyznudy.cz on Dubí; royalcrystal.cz on originals versus copies. Where they disagree, both are given.
Ea for Co²⁺ in a glaze melt: over the plausible 200–300 kJ/mol the predicted edge width moves by a factor of 40, so no bleed length is quoted anywhere here.
The cosine counts hold against this photograph's resolution; a sharper one would need more.
The tile's maker and year. The back gives VH20 and an arc reading …CHOSLOVAK….
The Ea range is taken from Zhang, Ni & Chen, Diffusion data in silicate melts, Reviews in Mineralogy & Geochemistry 72 (2010), for divalent network-modifying cations. It is a range for a family of cations, not a measured value for Co²⁺ in this glaze, which is exactly why nothing is quoted from it.