Generating Aperiodic Tilings with Plane Waves

Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
2 replies · 2K views
cuallito
Messages
94
Reaction score
1
Hello, I saw an applet awhile ago during a late-night mathematical web-surfing marathon that used the addition of plane waves at different angles to generate aperiodic tilings (like the penrose tiling.) I haven't been able to find it again. I'm trying to make my own version of it, using the same idea.

Code:
xmin = -10; (*Min X coord to graph*)
xmax = 10; (*Max X coord to graph*)
ymin = -10; (*Min Y coord to graph*)
ymax = 10; (*Max Y coord to graph*)
rez = 300; (*Graph resolution*)
sym = 8; (*Directions of symmetry*)
v = 2*Pi*(Sin[i*2*Pi]*x + Cos[i*2*Pi]*y);
Sinu = Cos[v];
P = N[Sum[Sinu, {i, 0, (sym - 1)/sym, 1/sym}]]
MatrixPlot[ Table[P, {x, xmin, xmax, (xmax - xmin)/rez}, {y, ymin,   ymax, (ymax - ymin)/rez}]]

It works like a charm for even numbers of symmetry (change the 'sym' variable to play around with different fold symmetries), but for odd numbers of 'sym' it generates patterns with 2*sym-fold symmetry. I've tried everything, like using Exp[i*v] instead of Cos[v], varying the phase between each of the component waves, and even using Sinu=Cos[v]*UnitStep[v] to stop from getting 'extra' interference, but none of them gives me the correct result for odd numbers :( Help!?
 
on Phys.org
By construction, your pattern is symmetric for x-> -x, y-> -y, your v changes its sign and cosine is an even function. You cannot produce odd symmetry with it. Using Sinu=Sin[v] might work for odd symmetries.
 
For some reason, using a clipped Sine function seems to work:

Anyone know why? A regular sine function just creates the double symmetry problem again.

Code:
xmin = -10;
xmax = 10;
ymin = -10;
ymax = 10;
rez = 400;
sym = 5;
v = 2*Pi*(Sin[i*2*Pi]*x + Cos[i*2*Pi]*y);
Sinu = Max[Sin[ v], 0];
P = Sum[Sinu, {i, 0, (sym - 1)/sym, 1/sym}];
MatrixPlot[ Table[N[P], {x, xmin, xmax, (xmax - xmin)/rez}, {y, ymin,   ymax, (ymax - ymin)/rez}]]

penrose.png
 
Last edited: