math
Representation of the numbers used in {5, (3,)* 4} tessellations matrices.
In a previous post I stated
For example, if cosh(d) is the golden number
then translating d five times along (in order)
+x, +y, –x, –y, and +x
is equivalent to rotating 90° in the x-y plane.
I could explain why this is must be true,
with discussion of Schläfli symbols, tessellation theory, etc;
but instead I will accept it as a definition and derive numbers from it.
Recall that a hyperbolic translation matrix takes the form
where c^{2} – s^{2} = 1.
Taking the initial statement that chaining five of these
(+x, +y, –x, –y, and +x)
results in a 90° rotation
gives us
In general, equations such as this,
which provide nine constraints on only two variable,
are not solvable.
However, in this case it is.
Looking at the central cell we find
– cs^{2} + c^{2} = 0,
which, assuming c ≠; 0, means s^{2} = c.
Since we also know that c^{2} = 1 + s^{2},
we also know that c^{2} = 1 + c
and s^{4} = 1 + s^{2}.
This uniquely identifies c as the golden number 1.6182…,
but we won’t need that fact for what follows.
algorithm
For computational purposes, we’d like to be able to store
arbitrary products of these translation matrices in a clean, compact way.
This will allow us to easily manipulate and examine locations
on the {5, 3, 4} and {4, 3, 5} tessellations.
In particular, this means we need a representation which includes
0, 1, s, and c
and which is closed under addition, negation, and multiplication.
We’ll do this by storing a vector of coefficients
which we’ll dot with [1, s, c, sc]
to get the actual number represented.
This is a fairly common approach to creating numbers;
you start with what you know you need
and then expand the set to keep it closed under the operations required.
Note that we don’t need any other terms:
s times s is covered by c,
c times c is covered by 1 and c,
and all the other products reduce to one of those two.
With this representation we can now derive the multiplication algorithm:
Thanks to a reader who corrected a typo in an earlier version of this pseudocode
(a, b, c, d) × (x, y, z, w)
Call the answer (m, n, o, p);
The easy part {
m = a x;
n = a y + b x;
o = a z + b y + c x;
p = a w + b z + c y + d x;
};
The c^{2} = 1 + c part {
m += c z + b w + d y + d w;
n += c w + d z;
o += c z + b w + d y + 2 d w;
p += c w + d z ;
};
That’s it.
We now have a simple closed-form way of computing and expressing
the locations of all vertices in the {5, (3,)* 4} tessellations.
It is canonical (thanks to the irrationality of ϕ)
and relatively efficient to compute.
It is not, however, dense;
for example, the representable point [ (0,1,0,0), (0,1,0,0), (0,0,0,1) ]
is not a vertex in the tessellation.
Looking for comments…