Almost-uniform tilings?

Higher-dimensional geometry (previously "Polyshapes").

Re: Almost-uniform tilings?

Postby Marek14 » Fri Feb 12, 2021 3:32 am

Ah, looks good :)

As for 3,4,7, I haven't found any tilings because I didn't get there yet. The capacity of my machine is limited. I started a simple search, and so far the hybrids are:
(3,4,4,7,4,3,7) + (3,4,4,4,7,4,4) (3 solutions)
(3,4,4,4,4,7,4) + (4,4,4,4,4,4,4) (44 solutions)
(3,4,4,4,7,4,4) + (4,4,4,4,4,4,4) (36 solutions)
(3,3,3,4,7,7,7)x2 + (3,4,4,4,3,7,7) (4 solutions)
(3,3,3,4,7,7,7)x2 + (3,4,4,3,7,4,7) (2 solutions)
(3,3,3,4,7,7,7) + (3,3,3,7,7,4,7) + (3,4,4,4,7,3,7) (10 solutions)
(3,3,3,4,7,7,7) + (3,3,3,7,7,4,7) + (3,4,3,4,4,7,7) (4 solutions)
(3,3,3,4,7,7,7) + (3,3,3,7,7,4,7) + (3,4,4,3,4,7,7) (4 solutions)
(3,3,3,4,7,7,7) + (3,3,3,7,7,4,7) + (3,4,3,4,7,4,7) (12 solutions)

And it continues like this, There are a lot of degrees of freedom and some big families (over 600 solutions for (3,4,4,4,7,4,4) + (4,4,4,4,4,4,4)x2). Raw solution file that checks solely hybrid combinations up to 3 vertex types has around 4 MB.
If you're interested, I can build any of these. Any specific combination you're after?
Marek14
Pentonian
 
Posts: 1191
Joined: Sat Jul 16, 2005 6:40 pm

Re: Almost-uniform tilings?

Postby mr_e_man » Fri Feb 12, 2021 6:30 am

Any one of those combinations, because it has different numbers of squares at the different vertex types, would show that a triangle and a heptagon equals two squares. Does any such tiling obviously exist, supposing we didn't already know about this coincidence of angles? The obviousness could come from symmetry, or from cutting and rearranging {4,7} in some way....
ΓΔΘΛΞΠΣΦΨΩ αβγδεζηθϑικλμνξοπρϱσςτυϕφχψωϖ °±∓½⅓⅔¼¾×÷†‡• ⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎
ℕℤℚℝℂ∂¬∀∃∅∆∇∈∉∋∌∏∑ ∗∘∙√∛∜∝∞∧∨∩∪∫≅≈≟≠≡≤≥⊂⊃⊆⊇ ⊕⊖⊗⊘⊙⌈⌉⌊⌋⌜⌝⌞⌟〈〉⟨⟩
mr_e_man
Tetronian
 
Posts: 538
Joined: Tue Sep 18, 2018 4:10 am

Re: Almost-uniform tilings?

Postby Marek14 » Fri Feb 12, 2021 6:45 am

mr_e_man wrote:Any one of those combinations, because it has different numbers of squares at the different vertex types, would show that a triangle and a heptagon equals two squares. Does any such tiling obviously exist, supposing we didn't already know about this coincidence of angles? The obviousness could come from symmetry, or from cutting and rearranging {4,7} in some way....


I have no idea. Right now, I'm putting together a writeup of the dualization algorithm I use to transform rough output from the solver into a HyperRogue *.tes file to visualize it. If I understand the process better, me, or someone on Discord, might create a way to improve it, and/or automate it. The huge number of solutions from some classes are probably impossible to visualize without automation.
Marek14
Pentonian
 
Posts: 1191
Joined: Sat Jul 16, 2005 6:40 pm

Re: Almost-uniform tilings?

Postby Marek14 » Fri Feb 12, 2021 11:26 am

Here are the solutions I've built. I have pictures for each one centered on each possible tile, so ask if you want to see a particular view.
Attachments
47 1a.png
(808.75 KiB) Not downloaded yet
47 2a.png
(806.1 KiB) Not downloaded yet
47 3a1.png
(811.19 KiB) Not downloaded yet
47 4a1.png
(794.23 KiB) Not downloaded yet
Marek14
Pentonian
 
Posts: 1191
Joined: Sat Jul 16, 2005 6:40 pm

Re: Almost-uniform tilings?

Postby Marek14 » Fri Feb 12, 2021 11:27 am

And here's my writeup:

Dualization algorithm:

!!!Step 0: The output

0 | 0 | 0' 1' 2' 2' 1' 0' 6' 7' 8' 7' 6' | 0'' |
Tiling data info:
Number of edges: 14
Desired vertex weight: 60
Right neighbors: [0,1,3,4,5,6,7,8,9,10,11,12,2,13]
Left neighbors: [0,1,12,2,3,4,5,6,7,8,9,10,11,13]
Left vertex weights: [5,5,12,5,5,5,5,5,12,12,12,12,12,12]
Mirrors: [1,0,7,6,5,4,3,2,12,11,10,9,8,13]
Edge types: [70,70,77,70,70,70,70,161,168,168,168,168,168,168]
Match types: [70,70,161,70,70,70,70,77,168,168,168,168,168,168]
Cone points allowed: true
Connectivity required: true

Canonical solutions: 1
(0 1')[0'][2'](6' 7')(8' 0'')
[0,1,2,3,4,5,6,7,8,9,10,11,12,13]: (id)

0 1 2 3 4 5 6 | 0 1 2 3 4 5 6 | 0' 1' 2' 3' 4' 5' 6' | 0' 1' 2' 3' 4' 5' 6' |
Tiling data info:
Number of edges: 28
Desired vertex weight: 84
Right neighbors: [1,2,3,4,5,6,0,13,7,8,9,10,11,12,15,16,17,18,19,20,14,27,21,22,23,24,25,26]
Left neighbors: [6,0,1,2,3,4,5,8,9,10,11,12,13,7,20,14,15,16,17,18,19,22,23,24,25,26,27,21]
Left vertex weights: [21,12,21,21,28,12,28,12,21,21,28,12,28,21,21,12,21,21,21,21,28,12,21,21,21,21,28,21]
Mirrors: [7,8,9,10,11,12,13,0,1,2,3,4,5,6,21,22,23,24,25,26,27,14,15,16,17,18,19,20]
Edge types: [369,621,630,833,376,824,637,621,369,630,637,824,376,833,369,621,630,630,630,833,637,621,369,630,630,630,637,833]
Match types: [621,369,630,637,824,376,833,369,621,630,833,376,824,637,621,369,630,630,630,637,833,369,621,630,630,630,833,637]
Cone points allowed: true
Connectivity required: true

Canonical solutions: 4
(0 1)(2 3')(3 6')(4 5)(6 5')(0' 1')(2')(4')
[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27]: (id)
(0 1)[2 2'][3 5'](4 5)[6 6'](0' 1')(3')(4')
[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27]: (id)
(0 1)[2 2'][3 5'](4 5)[6 6'](0' 1')[3' 4']
[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27]: (id)
(0 1)[2 3'](3 6')(4 5)(6 5')(0' 1')[2' 4']
[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27]: (id)

This is what the output from the solver looks like these days. I'm using two examples. First is a hybrid between tilings {12,10} and {5,12}, with a (5,5,5,5,5,5,12,12,12,12,12) vertex as an in-between. The second is a set of 4 solutions that combine vertices of type (3,4,4,7,4,3,7) and (3,4,4,4,4,7,4), both belonging to what I call "the {4,7} class", based on replacing two squares in {4,7} vertex with a combination of a triangle and a heptagon.

!!!Step 1: Creating a skelet of vertex symbols.
The most basic unit we're working with is the half-edge. That's just what it says: a half of an edge with one vertex attached. The half-edge is described using three pieces of data: the edge index, the vertex index, and the mirror symbol.
The tiling has a number of distinct vertex class. The vertex index is vertex class of vertex that is on the half-edge in question. Each vertex class has a number of halfedges that come out of the vertex; edge index is the number of the half-edge on the vertex.

Let's look at the first row of the solution for the {4,7} class:
0 1 2 3 4 5 6 | 0 1 2 3 4 5 6 | 0' 1' 2' 3' 4' 5' 6' | 0' 1' 2' 3' 4' 5' 6' |
This row describes the vertices. There are edge indexes from 0 to 6 on two vertices: 0 (no symbol) and 1 (marked by prime (')).
But why is each of these doubled? That is because these vertices are chiral, i.e. there are no axes of symmetry that would pass through them. So the first set of numbers 0-6 describes one chirality of vertex 0, and the second describes the other chirality. The row of numbers printed in the solution is there so I could understand at a glance the symmetries of vertices in the tiling.
To build the "vertex skelet", I start by putting each symbol on its own row.

0
1
2
3
4
5
6
*0
*1
*2
*3
*4
*5
*6
0'
1'
2'
3'
4'
5'
6'
*0'
*1'
*2'
*3'
*4'
*5'
*6'

I've also added the mirror symbols here. A mirror symbol's function is just to distinguish between enantiomers of the same half-edge. Half-edge 0 is the mirror image of the half-edge *0.

Now let's do the same to the {12,10} class solution:

0 | 0 | 0' 1' 2' 2' 1' 0' 6' 7' 8' 7' 6' | 0'' |

0
*0
0'
1'
2'
*2'
*1'
*0'
6'
7'
8'
*7'
*6'
0''

There are couple more concepts to explain here. First, there are three vertex classes, and class 2 is marked by two primes (''). If we have even more, we *could* probably start to just add more and more primes, but that would quickly get unwieldy. So I've actually made two notations for marking the half-edges. A half-edge 1 of class 3 can be marked as either 1''' or 1@3.
The standard use is that the @ notation is used from class 4 onwards. It's much better for bigger class numbers, but small number of primes seems simpler to me for smaller classes. Especially class 0 where there is no symbol.

Second, the vertices of this tiling are of orders, respectively, 10, 11, and 12. But, as you might have noticed, only vertex class 1 actually has 11 distinct symbols. This is because the other two vertices possess rotational symmetry.
Rotational symmetry means that the actual size of the vertex is reduced to one of its factors. In this case, both the vertex 0 of degree 10 and vertex 2 of degree 12 are reduced to degree 1, signifying that all half-edges from these vertices are identical. It's not just those vertices that have rotational symmetry: any symmetry of vertex that is recorded here is automatically a symmetry of the whole tiling.

Third, you will notice that only one vertex class (0) is chiral. The other two are represented by only one group of numbers each, meaning that they have reflection symmetry.
Let's look at class 1 first. Instead of the numbers going from 0 to 10, they are grouped around mirrors. You can see that there is one mirror in this vertex passing between half-edges 2' and 3' (or 2'and *2'), and the other passes *through* the half-edge 8'. Each half-edge has the same index it would normally have, *except* if it's a mirror image of a half-edge somewhere before it, in which case it's marked as the mirror of that half-edge.

Finally, half-edges 8' and 0'' only appear once in the whole thing. These half-edges have mirrors passing through them, so they are their own mirror images. That means we should assign them a third type of mirror symbol:

Mirror symbol 0 <-> Mirror symbol 1(*)
Mirror symbol 2 (self-corresponding)

Only mirror symbol 1 is actually printed, but internally, all 3 should be used because we need a way to transform a half-edge into its mirror image -- and this is done by changing 0 to 1, 1 to 0, or leaving 2 unchanged.

So now we know the symmetries of the three vertex classes of the {12,10} solution: class 0 vertices have rotational symmetry of order 10 (but no reflection symmetry, meaning that they still occur in two chiral versions), class 1 vertices have reflection symmetry and class 2 vertices have full dodecagonal symmetry -- 12 axes of symmetry coupled with rotational symmetry of order 12. Note that in this notation, a vertex can be only displayed with *one* axis of reflection. If it has two or more, then it automatically has rotational symmetry as well and it will be reduced in size to its factor.

Now that we have listed the half-edges, we will expand them into *vertex symbols*:

0/0(12)-
*0/*0(12)-
0'/1'(12)-
1'/2'(12)-
2'/*2'(12)-
*2'/*1'(12)-
*1'/*0'(12)-
*0'/6'(5)-
6'/7'(5)-
7'/8'(5)-
8'/*7'(5)-
*7'/*6'(5)-
*6'/0'(5)-
0''/0''(5)-

and
(3,4,4,7,4,3,7) and (3,4,4,4,4,7,4)
0/1(7)-
1/2(4)-
2/3(4)-
3/4(3)-
4/5(7)-
5/6(3)-
6/0(4)-
*0/*6(4)-
*1/*0(7)-
*2/*1(4)-
*3/*2(4)-
*4/*3(3)-
*5/*4(7)-
*6/*5(3)-
0'/1'(7)-
1'/2'(4)-
2'/3'(4)-
3'/4'(4)-
4'/5'(4)-
5'/6'(3)-
6'/0'(4)-
*0'/*6'(4)-
*1'/*0'(7)-
*2'/*1'(4)-
*3'/*2'(4)-
*4'/*3'(4)-
*5'/*4'(4)-
*6'/*5'(3)-

For vertices with reflection symmetry, we simply append the next half-edge in sequence (cyclically, so the final half-edge is appended with the first one). For chiral vertices, two cycles will be created, with the second one (made from mirror symbol 1, i.e. starred, half-edges) appends the *previous* half-edge. That way, we get, say, vertex symbol 4/5 and its mirror image *5/*4.

Now, what's the number in parentheses? That's the polygon marker. I use them because when I do this by hand, these markers tell me when I've made some sort of a mistake. These symbols, you see, are concatenated to form the regular polygonal tiles of the tiling, and if it's done correctly, the polygon marker on all symbols from the same tile will be the same.

How do we obtain that? Well, look at these two lines in the solution:

0 | 0 | 0' 1' 2' 2' 1' 0' 6' 7' 8' 7' 6' | 0'' |
Tiling data info:
Number of edges: 14
***Desired vertex weight: 60
Right neighbors: [0,1,3,4,5,6,7,8,9,10,11,12,2,13]
Left neighbors: [0,1,12,2,3,4,5,6,7,8,9,10,11,13]
***Left vertex weights: [5,5,12,5,5,5,5,5,12,12,12,12,12,12]
Mirrors: [1,0,7,6,5,4,3,2,12,11,10,9,8,13]
Edge types: [70,70,77,70,70,70,70,161,168,168,168,168,168,168]
Match types: [70,70,161,70,70,70,70,77,168,168,168,168,168,168]
Cone points allowed: true
Connectivity required: true

Canonical solutions: 1
(0 1')[0'][2'](6' 7')(8' 0'')
[0,1,2,3,4,5,6,7,8,9,10,11,12,13]: (id)

The "Left vertex weights" line assigns each half-edge a number. 0 is assigned 5, *0 is also assigned 5, 0' is assigned 12, etc. These describe angles between this half-edge and its predecessor. "Desired vertex weight" is simply how many angle units form the full angle. This allows us to use integers as angle measures regardless of what type of tiling we work with.
So the correct polygon marker to attach to a particular vertex symbol edge is found as follows:

1) Find the *second* half-edge in the symbol and its global index.
2) Find the Left vertex weights value for this global index.
3) Divide Desired vertex weight by this number and you have your polygon marker.

Note that if we simply create some sort of correspondence between global index of the half-edge and its string representation, the "Right neighbors" row can be used to directly create vertex symbols because it directly tells you the second half-edge in the symbol.

!!!Step 2: Assemble the vertex symbols into polygons.
In the previous step, we only worked with the first part of solution. That is just the description of the problem. Now we need to actually use the solutions that were found by the program.

Let's look at the {12,5} class solution:
Canonical solutions: 1
(0 1')[0'][2'](6' 7')(8' 0'')
[0,1,2,3,4,5,6,7,8,9,10,11,12,13]: (id)

And the {4,7} class solutions:
Canonical solutions: 4
(0 1)(2 3')(3 6')(4 5)(6 5')(0' 1')(2')(4')
[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27]: (id)
(0 1)[2 2'][3 5'](4 5)[6 6'](0' 1')(3')(4')
[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27]: (id)
(0 1)[2 2'][3 5'](4 5)[6 6'](0' 1')[3' 4']
[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27]: (id)
(0 1)[2 3'](3 6')(4 5)(6 5')(0' 1')[2' 4']
[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27]: (id)

"Canonical solutions" row simply tells you how many solutions were found. "Canonical" is there because if the vertex has any sort of symmetry, you can get multiple solutions that have the same structure and can be transformed one into another by some sort of symmetry operation on the half-edges. Canonical solutions weeds that out: each canonical solution is guaranteed to be unique.
Next, you have each solution, composed of the solution string (based on Conway's notation), followed by enumerated symmetries of that solution.

OK, why are the symmetries there? They are, basically, a reality check. A proper solution should have *no* symmetries apart from the identity. If there are more than that, it means that the solution can be simplified, either by replacing some vertices with more symmetrical versions or by combining multiple identical vertices into a single class. So any solution with more than one row of symmetries can be safely ignored unless you specifically search for such things (for example when exploring various colorings, etc.).

Now, an unfortunate fact. Presence of multiple symmetry rows is sufficient condition for the solution to be a copy of a simpler solution, but *not* the necessary condition. I don't know what the actual necessary condition is. In other words, it's still possible to get solutions that are copies, even if you weed out the symmetrical ones; they won't be eliminated completely.

But these particular solutions are the simplest in their group, so they have no symmetries. So we associate each Conway (solution) string with the vertex skelet we've built in Step 1:

(0 1')[0'][2'](6' 7')(8' 0'')
0/0(12)-
*0/*0(12)-
0'/1'(12)-
1'/2'(12)-
2'/*2'(12)-
*2'/*1'(12)-
*1'/*0'(12)-
*0'/6'(5)-
6'/7'(5)-
7'/8'(5)-
8'/*7'(5)-
*7'/*6'(5)-
*6'/0'(5)-
0''/0''(5)-

(0 1)(2 3')(3 6')(4 5)(6 5')(0' 1')(2')(4')
0/1(7)-
1/2(4)-
2/3(4)-
3/4(3)-
4/5(7)-
5/6(3)-
6/0(4)-
*0/*6(4)-
*1/*0(7)-
*2/*1(4)-
*3/*2(4)-
*4/*3(3)-
*5/*4(7)-
*6/*5(3)-
0'/1'(7)-
1'/2'(4)-
2'/3'(4)-
3'/4'(4)-
4'/5'(4)-
5'/6'(3)-
6'/0'(4)-
*0'/*6'(4)-
*1'/*0'(7)-
*2'/*1'(4)-
*3'/*2'(4)-
*4'/*3'(4)-
*5'/*4'(4)-
*6'/*5'(3)-

(0 1)[2 2'][3 5'](4 5)[6 6'](0' 1')(3')(4')
0/1(7)-
1/2(4)-
2/3(4)-
3/4(3)-
4/5(7)-
5/6(3)-
6/0(4)-
*0/*6(4)-
*1/*0(7)-
*2/*1(4)-
*3/*2(4)-
*4/*3(3)-
*5/*4(7)-
*6/*5(3)-
0'/1'(7)-
1'/2'(4)-
2'/3'(4)-
3'/4'(4)-
4'/5'(4)-
5'/6'(3)-
6'/0'(4)-
*0'/*6'(4)-
*1'/*0'(7)-
*2'/*1'(4)-
*3'/*2'(4)-
*4'/*3'(4)-
*5'/*4'(4)-
*6'/*5'(3)-

(0 1)[2 2'][3 5'](4 5)[6 6'](0' 1')[3' 4']
0/1(7)-
1/2(4)-
2/3(4)-
3/4(3)-
4/5(7)-
5/6(3)-
6/0(4)-
*0/*6(4)-
*1/*0(7)-
*2/*1(4)-
*3/*2(4)-
*4/*3(3)-
*5/*4(7)-
*6/*5(3)-
0'/1'(7)-
1'/2'(4)-
2'/3'(4)-
3'/4'(4)-
4'/5'(4)-
5'/6'(3)-
6'/0'(4)-
*0'/*6'(4)-
*1'/*0'(7)-
*2'/*1'(4)-
*3'/*2'(4)-
*4'/*3'(4)-
*5'/*4'(4)-
*6'/*5'(3)-

(0 1)[2 3'](3 6')(4 5)(6 5')(0' 1')[2' 4']
0/1(7)-
1/2(4)-
2/3(4)-
3/4(3)-
4/5(7)-
5/6(3)-
6/0(4)-
*0/*6(4)-
*1/*0(7)-
*2/*1(4)-
*3/*2(4)-
*4/*3(3)-
*5/*4(7)-
*6/*5(3)-
0'/1'(7)-
1'/2'(4)-
2'/3'(4)-
3'/4'(4)-
4'/5'(4)-
5'/6'(3)-
6'/0'(4)-
*0'/*6'(4)-
*1'/*0'(7)-
*2'/*1'(4)-
*3'/*2'(4)-
*4'/*3'(4)-
*5'/*4'(4)-
*6'/*5'(3)-

Next, we will weave the polygons according to the solutions. Let's illustrate on the simplest one:

(0 1')[0'][2'](6' 7')(8' 0'')
0/0(12)-
*0/*0(12)-
0'/1'(12)-
1'/2'(12)-
2'/*2'(12)-
*2'/*1'(12)-
*1'/*0'(12)-
*0'/6'(5)-
6'/7'(5)-
7'/8'(5)-
8'/*7'(5)-
*7'/*6'(5)-
*6'/0'(5)-
0''/0''(5)-

Start with the first vertex symbol, "0/0(12)-". The second half-edge is 0. The Conway string contains this half-edge in (0 1'). That means that we need to search for the vertex symbol that starts with 1' and append it:

(0 1')[0'][2'](6' 7')(8' 0'')
0/0(12)-1'/2'(12)-
*0/*0(12)-
0'/1'(12)-
2'/*2'(12)-
*2'/*1'(12)-
*1'/*0'(12)-
*0'/6'(5)-
6'/7'(5)-
7'/8'(5)-
8'/*7'(5)-
*7'/*6'(5)-
*6'/0'(5)-
0''/0''(5)-

Now, what comes after 2'? The solution says "[2']", which means that 2' should be followed by 2', but mirrored (brackets indicate mirroring):

(0 1')[0'][2'](6' 7')(8' 0'')
0/0(12)-1'/2'(12)-*2'/*1'(12)-
*0/*0(12)-
0'/1'(12)-
2'/*2'(12)-
*1'/*0'(12)-
*0'/6'(5)-
6'/7'(5)-
7'/8'(5)-
8'/*7'(5)-
*7'/*6'(5)-
*6'/0'(5)-
0''/0''(5)-

Now the last symbol is *1'. 1' is present in (0 1'). Parentheses indicate no mirroring, meaning that *1' is followed by *0:

(0 1')[0'][2'](6' 7')(8' 0'')
0/0(12)-1'/2'(12)-*2'/*1'(12)-*0/*0(12)-
0'/1'(12)-
2'/*2'(12)-
*1'/*0'(12)-
*0'/6'(5)-
6'/7'(5)-
7'/8'(5)-
8'/*7'(5)-
*7'/*6'(5)-
*6'/0'(5)-
0''/0''(5)-

*0 is followed by *1' by rule (0 1') again...

(0 1')[0'][2'](6' 7')(8' 0'')
0/0(12)-1'/2'(12)-*2'/*1'(12)-*0/*0(12)-*1'/*0'(12)-
0'/1'(12)-
2'/*2'(12)-
*0'/6'(5)-
6'/7'(5)-
7'/8'(5)-
8'/*7'(5)-
*7'/*6'(5)-
*6'/0'(5)-
0''/0''(5)-

*0' is followed by 0' by rule [0']:

(0 1')[0'][2'](6' 7')(8' 0'')
0/0(12)-1'/2'(12)-*2'/*1'(12)-*0/*0(12)-*1'/*0'(12)-0'/1'(12)-
2'/*2'(12)-
*0'/6'(5)-
6'/7'(5)-
7'/8'(5)-
8'/*7'(5)-
*7'/*6'(5)-
*6'/0'(5)-
0''/0''(5)-

And 1' is, by rule (0 1'), followed by 0. But 0 is the start of this whole row, which means we have completed the polygon.
By polygon marker (12) -- and notice that all vertex symbols have the same symbol -- this should be a dodecagon. however, the sequence closed after only 6 steps. That is not a problem. It simply means that the complete dodecagon will repeat the sequence twice. It has, thus, *multiplicity* of 2. This will be important later.

*** The number of vertex symbols in polygon sequence must be equal to either the polygon marker or to one of its factors, and all polygon markers in the sequence must be the same. ***

This is basically the only condition for the solution to be valid. This is what the program searches for.
(Technically, I ensure this with the "Edge types" and "Match types" rows in the solution header because this is simply one special case of much broader capability of the program.)

Now that we have a polygon, we can quickly assemble the others:

(0 1')[0'][2'](6' 7')(8' 0'')
0/0(12)-1'/2'(12)-*2'/*1'(12)-*0/*0(12)-*1'/*0'(12)-0'/1'(12)-
2'/*2'(12)-
*0'/6'(5)-7'/8'(5)-0''/0''(5)-8'/*7'(5)-*6'/0'(5)-
6'/7'(5)-
*7'/*6'(5)-

The space at the beginning of the line is just a visual indicator that this is a complete polygon. As we can see, we have 5 tiles altogether: two dodecagons (with multiplicities 2 and 12) and three pentagons (with multiplicities 1, 5, and 5).

So, once again: Each part of the Conway string, enclosed in parentheses or brackets, represents a rule how to combine the half-edges.
(x) means: x is followed by x, *x is followed by *x
(x y) means: x is followed by y, y is followed by x, *x is followed by *y, *y is followed by *x
[x] means: x is followed by *x, *x is followed by x
[x y] means: x is followed by *y, y is followed by *x, *x is followed by y, *y is followed by x

Self-mirrored half-edges will only ever appear in (x) and (x y) symbols and they can only combine with themselves or with other self-mirrored half-edges.

Let's assemble the {4,7} solutions as well:

(0 1)(2 3')(3 6')(4 5)(6 5')(0' 1')(2')(4')
0/1(7)-
1/2(4)-3'/4'(4)-4'/5'(4)-6/0(4)-
2/3(4)-6'/0'(4)-1'/2'(4)-2'/3'(4)-
3/4(3)-5/6(3)-5'/6'(3)-
4/5(7)-
*0/*6(4)-*5'/*4'(4)-*4'/*3'(4)-*2/*1(4)-
*1/*0(7)-
*3/*2(4)-*3'/*2'(4)-*2'/*1'(4)-*0'/*6'(4)-
*4/*3(3)-*6'/*5'(3)-*6/*5(3)-
*5/*4(7)-
0'/1'(7)-
*1'/*0'(7)-

(0 1)[2 2'][3 5'](4 5)[6 6'](0' 1')(3')(4')
0/1(7)-
1/2(4)-*2'/*1'(4)-*0'/*6'(4)-6/0(4)-
2/3(4)-*5'/*4'(4)-*4'/*3'(4)-*3'/*2'(4)-
3/4(3)-5/6(3)-*6'/*5'(3)-
4/5(7)-
*0/*6(4)-6'/0'(4)-1'/2'(4)-*2/*1(4)-
*1/*0(7)-
*3/*2(4)-2'/3'(4)-3'/4'(4)-4'/5'(4)-
*4/*3(3)-5'/6'(3)-*6/*5(3)-
*5/*4(7)-
0'/1'(7)-
*1'/*0'(7)-

(0 1)[2 2'][3 5'](4 5)[6 6'](0' 1')[3' 4']
0/1(7)-
1/2(4)-*2'/*1'(4)-*0'/*6'(4)-6/0(4)-
2/3(4)-*5'/*4'(4)-3'/4'(4)-*3'/*2'(4)-
3/4(3)-5/6(3)-*6'/*5'(3)-
4/5(7)-
*0/*6(4)-6'/0'(4)-1'/2'(4)-*2/*1(4)-
*1/*0(7)-
*3/*2(4)-2'/3'(4)-*4'/*3'(4)-4'/5'(4)-
*4/*3(3)-5'/6'(3)-*6/*5(3)-
*5/*4(7)-
0'/1'(7)-
*1'/*0'(7)-

(0 1)[2 3'](3 6')(4 5)(6 5')(0' 1')[2' 4']
0/1(7)-
1/2(4)-*3'/*2'(4)-4'/5'(4)-6/0(4)-
2/3(4)-6'/0'(4)-1'/2'(4)-*4'/*3'(4)-
3/4(3)-5/6(3)-5'/6'(3)-
4/5(7)-
*0/*6(4)-*5'/*4'(4)-2'/3'(4)-*2/*1(4)-
*1/*0(7)-
*3/*2(4)-3'/4'(4)-*2'/*1'(4)-*0'/*6'(4)-
*4/*3(3)-*6'/*5'(3)-*6/*5(3)-
*5/*4(7)-
0'/1'(7)-
*1'/*0'(7)-

!!!Step 3: Collating and numbering
Now that we have all the polygons of the tiling, we have to put them to some sort of order and assign them index numbers. First part here is the collating.
You see, sometimes a polygon has a reflection symmetry and sometimes it doesn't. If it doesn't, its enantiomers will appear on two different lines, and ideally, we want to put them next to each other.
How to determine whether the polygon has a reflection symmetry? Well, all you need to do is to take the first vertex symbol and mirror it, i.e. mirror each half-edge and swap their order. A mirror of 0/1 is *1/*0. A mirror of 7'/8' from the {12,10} solution is 8'/*7' because 8' is a self-mirrored half-edge which is not changed by mirroring. 2'/*2' is mirrored into 2'/*2'again -- that's a self-mirrored vertex form.
Now look for this mirrored vertex symbol. Is it in the same polygon? Then the polygon has reflection symmetry. Is it in another polygon? Then that's the mirror image of the polygon you're looking at and it should be moved close to it.

And after that, you just assign indexes. My result for our solutions looks like this:

(0 1')[0'][2'](6' 7')(8' 0'')
0: 0/0(12)-1'/2'(12)-*2'/*1'(12)-*0/*0(12)-*1'/*0'(12)-0'/1'(12)-
1: 2'/*2'(12)-
2: *0'/6'(5)-7'/8'(5)-0''/0''(5)-8'/*7'(5)-*6'/0'(5)-
3/4: 6'/7'(5)-
*7'/*6'(5)-

(0 1)(2 3')(3 6')(4 5)(6 5')(0' 1')(2')(4')
0: 0/1(7)-
*1/*0(7)-
1: 1/2(4)-3'/4'(4)-4'/5'(4)-6/0(4)-
*0/*6(4)-*5'/*4'(4)-*4'/*3'(4)-*2/*1(4)-
2: 2/3(4)-6'/0'(4)-1'/2'(4)-2'/3'(4)-
*3/*2(4)-*3'/*2'(4)-*2'/*1'(4)-*0'/*6'(4)-
3: 3/4(3)-5/6(3)-5'/6'(3)-
*4/*3(3)-*6'/*5'(3)-*6/*5(3)-
4: 4/5(7)-
*5/*4(7)-
5: 0'/1'(7)-
*1'/*0'(7)-

(0 1)[2 2'][3 5'](4 5)[6 6'](0' 1')(3')(4')
0: 0/1(7)-
*1/*0(7)-
1: 1/2(4)-*2'/*1'(4)-*0'/*6'(4)-6/0(4)-
*0/*6(4)-6'/0'(4)-1'/2'(4)-*2/*1(4)-
2: 2/3(4)-*5'/*4'(4)-*4'/*3'(4)-*3'/*2'(4)-
*3/*2(4)-2'/3'(4)-3'/4'(4)-4'/5'(4)-
3: 3/4(3)-5/6(3)-*6'/*5'(3)-
*4/*3(3)-5'/6'(3)-*6/*5(3)-
4: 4/5(7)-
*5/*4(7)-
5: 0'/1'(7)-
*1'/*0'(7)-

(0 1)[2 2'][3 5'](4 5)[6 6'](0' 1')[3' 4']
0: 0/1(7)-
*1/*0(7)-
1: 1/2(4)-*2'/*1'(4)-*0'/*6'(4)-6/0(4)-
*0/*6(4)-6'/0'(4)-1'/2'(4)-*2/*1(4)-
2: 2/3(4)-*5'/*4'(4)-3'/4'(4)-*3'/*2'(4)-
*3/*2(4)-2'/3'(4)-*4'/*3'(4)-4'/5'(4)-
3: 3/4(3)-5/6(3)-*6'/*5'(3)-
*4/*3(3)-5'/6'(3)-*6/*5(3)-
4: 4/5(7)-
*5/*4(7)-
5: 0'/1'(7)-
*1'/*0'(7)-

(0 1)[2 3'](3 6')(4 5)(6 5')(0' 1')[2' 4']
0: 0/1(7)-
*1/*0(7)-
1: 1/2(4)-*3'/*2'(4)-4'/5'(4)-6/0(4)-
*0/*6(4)-*5'/*4'(4)-2'/3'(4)-*2/*1(4)-
2: 2/3(4)-6'/0'(4)-1'/2'(4)-*4'/*3'(4)-
*3/*2(4)-3'/4'(4)-*2'/*1'(4)-*0'/*6'(4)-
3: 3/4(3)-5/6(3)-5'/6'(3)-
*4/*3(3)-*6'/*5'(3)-*6/*5(3)-
4: 4/5(7)-
*5/*4(7)-
5: 0'/1'(7)-
*1'/*0'(7)-

OK, what's going on here? Well, here's one thing that must be taken into account: there is, conceptually, a difference between tilings that contain tiles with reflection symmetry and tilings that don't.

This is not related to the way HyperRogue implements these tilings. Long story short, if there is at least one tile with reflection symmetry, then I have to implement tiles *without* reflection symmetry as two separate tiles (one for each enantiomer) to make it work correctly. But if *no* tile has reflection symmetry, then I can implement just one enantiomer of each as a tile, and it will be fine. So, at this point, the further steps will be a little different based on whether we have reflection symmetry or not.

Tilings without reflection symmetry on tiles might be actually chiral (it's a necessary conditon), but also, they might not be. They may even still have reflection symmetry, just not through tiles (so, the only mirrors allowed are those that lie wholly within edges).

As for the way you order the tiles, it doesn't really matter. I like to keep them as close to their original order as possible, but you can easily sort them by polygon size or by any other criteria.

!!!Step 4: Building a new Conway string
Now that we have tiles of the tiling, we match their edges together to create a new Conway string. In *.tes files, these strings describe how edges match, i.e. where you will end up if you leave a particular polygon through a particular edge.
The original solution is actually also concepted as edge-based -- instead of putting vertices together, we can also put together tiles that are dual to those vertices. It's all the same.

So, starting with the {12,10} solution,

(0 1')[0'][2'](6' 7')(8' 0'')
0: 0/0(12)-1'/2'(12)-*2'/*1'(12)-*0/*0(12)-*1'/*0'(12)-0'/1'(12)-
1: 2'/*2'(12)-
2: *0'/6'(5)-7'/8'(5)-0''/0''(5)-8'/*7'(5)-*6'/0'(5)-
3/4: 6'/7'(5)-
*7'/*6'(5)-

we build a new Conway string.

Let's rewrite these polygons a bit:
0: 1'(12)-0/0(12)-1'/2'(12)-*2'/*1'(12)-*0/*0(12)-*1'/*0'(12)-0'/
1: *2'(12)-2'/
2: 0'(5)-*0'/6'(5)-7'/8'(5)-0''/0''(5)-8'/*7'(5)-*6'/
3/4: 7'(5)-6'/
*6'(5)-*7'/

We just take the last half-edge of the polygon and move it to the front. Now, the polygon is no longer formed from vertex symbols separated by dashes, but from edge symbols separated by slashes! So, for example, the edge 0 (0th edge of the 0th polygon) is "1'-0", edge 1 is "0-1'", edge 3'' is "0''-8'", etc. (This is just a visualization, you don't have to actually do it physically, you just need to understand what each edge *is*.)

Two edges match if they have the same half-edges, but in the opposite order. So "1'-0" matches "0-1'".

This is confusing because I use the same naming scheme for edges of the polygons as for half-edges on the vertices. Sorry about that.

Let's write the edges in clearer way:
0/6: 1'-0/
1/7: 0-1'/
2/8: 2'-*2'/
3/9: *1'-*0/
4/10: *0-*1'/
5/11: *0'-0'/
0'/1'/2'/3'/4'/5'/6'/7'/8'/9'/10'/11': *2'-2'/
0'': 0'-*0'/
1'': 6'-7'/
2'': 8'-0''/
3'': 0''-8'/
4'': *7'-*6'/
0'''/1'''/2'''/3'''/4''': 7'-6'/
0@4/1@4/2@4/3@4/4@4: *6'-*7'/

And here is where multiplicity comes into play. The polygon 0, for example, is a dodecagon, but it only has 6 vertex/edge symbols, so it has multiplicity of 2. That means that its edge 0 is also edge 6, edge 1 is also edge 7, etc. The polygon 1, dodecagon with multiplicity 12, has its only edge represented as 12 edges ranging from 0' to 11'.
This has to do with HyperRogue not representing the tiles with symmetries. Representing the same edge with different numbers is a bit of a kluge, but the important thing is that it works.

Now that we have this representation, we can match edges together:

0/6: 1'-0/ + 1/7: 0-1'/
2/8: 2'-*2'/ + 0'/1'/2'/3'/4'/5'/6'/7'/8'/9'/10'/11': *2'-2'/
3/9: *1'-*0/ + 4/10: *0-*1'/
5/11: *0'-0'/ + 0'': 0'-*0'/
1'': 6'-7'/ + 0'''/1'''/2'''/3'''/4''': 7'-6'/
2'': 8'-0''/ + 3'': 0''-8'/
4'': *7'-*6'/ + 0@4/1@4/2@4/3@4/4@4: *6'-*7'/

And therefore form the Conway string:
(0 1)(6 7)
(2 0')(8 1')(2 2')(8 3')(2 4')(8 5')(2 6')(8 7')(2 8')(8 9')(2 10')(8 11')
(3 4)(9 10)
(5 0'')(11 0'')
(1'' 0''')(1'' 1''')(1'' 2''')(1'' 3''')(1'' 4''')
(2'' 3'')
(4'' 0@4)(4'' 1@4)(4'' 2@4)(4'' 3@4)(4'' 4@4)

There's no edge in this example that would be matched with itself (for that, it would have to be composed of two identical half-edges), but if it was, it would be represented by a symbol of form (x).

With the multiplicities, the only real rule is that *each* representation of the edge must be in there somewhere. The way I do it is that I start with symbol containing the first edge on both sides, then advance both by one in each subsequent symbol (wrapping the shorter list back to the first element), until both lists are exhausted -- so there should be the same number of symbols as is the number of elements in the longer list of edges.

The final part is just to concatenate all that into one long string. This is how the final solution looks in my reference files:

(0 1')[0'][2'](6' 7')(8' 0'')
0: 0/0(12)-1'/2'(12)-*2'/*1'(12)-*0/*0(12)-*1'/*0'(12)-0'/1'(12)-[0/0(12)-1'/2'(12)-*2'/*1'(12)-*0/*0(12)-*1'/*0'(12)-0'/1'(12)]
1: 2'/*2'(12)-[2'/*2'(12)-2'/*2'(12)-2'/*2'(12)-2'/*2'(12)-2'/*2'(12)-2'/*2'(12)-2'/*2'(12)-2'/*2'(12)-2'/*2'(12)-2'/*2'(12)-2'/*2'(12)]
2: *0'/6'(5)-7'/8'(5)-0''/0''(5)-8'/*7'(5)-*6'/0'(5)
3/4: 6'/7'(5)-[6'/7'(5)-6'/7'(5)-6'/7'(5)-6'/7'(5)]
*7'/*6'(5)-[*7'/*6'(5)-*7'/*6'(5)-*7'/*6'(5)-*7'/*6'(5)]
(0 1)(6 7)(2 0')(8 1')(2 2')(8 3')(2 4')(8 5')(2 6')(8 7')(2 8')(8 9')(2 10')(8 11')(3 4)(9 10)(5 0'')(11 0'')(1'' 0''')(1'' 1''')(1'' 2''')(1'' 3''')(1'' 4''')(2'' 3'')(4'' 0@4)(4'' 1@4)(4'' 2@4)(4'' 3@4)(4'' 4@4)

I write the polygons in this way, with brackets denoting repeating part and without the final dash to signify that they are complete. But those brackets are becoming more and more unwieldy, maybe it could look like this in the future?

(0 1')[0'][2'](6' 7')(8' 0'')
0: [0/0(12)-1'/2'(12)-*2'/*1'(12)-*0/*0(12)-*1'/*0'(12)-0'/1'(12)]x2
1: [2'/*2'(12)]x12
2: *0'/6'(5)-7'/8'(5)-0''/0''(5)-8'/*7'(5)-*6'/0'(5)
3/4: [6'/7'(5)]x5
[*7'/*6'(5)]x5
(0 1)(6 7)(2 0')(8 1')(2 2')(8 3')(2 4')(8 5')(2 6')(8 7')(2 8')(8 9')(2 10')(8 11')(3 4)(9 10)(5 0'')(11 0'')(1'' 0''')(1'' 1''')(1'' 2''')(1'' 3''')(1'' 4''')(2'' 3'')(4'' 0@4)(4'' 1@4)(4'' 2@4)(4'' 3@4)(4'' 4@4)

Anyway, on to build the {4,7}-class solutions:

(0 1)(2 3')(3 6')(4 5)(6 5')(0' 1')(2')(4')
0: 0/1(7)-
*1/*0(7)-
1: 1/2(4)-3'/4'(4)-4'/5'(4)-6/0(4)-
*0/*6(4)-*5'/*4'(4)-*4'/*3'(4)-*2/*1(4)-
2: 2/3(4)-6'/0'(4)-1'/2'(4)-2'/3'(4)-
*3/*2(4)-*3'/*2'(4)-*2'/*1'(4)-*0'/*6'(4)-
3: 3/4(3)-5/6(3)-5'/6'(3)-
*4/*3(3)-*6'/*5'(3)-*6/*5(3)-
4: 4/5(7)-
*5/*4(7)-
5: 0'/1'(7)-
*1'/*0'(7)-

Since this is a solution without reflection symmetries, the sequence will be a bit different. First, we can safely ignore the mirror images:

(0 1)(2 3')(3 6')(4 5)(6 5')(0' 1')(2')(4')
0: 0/1(7)-
1: 1/2(4)-3'/4'(4)-4'/5'(4)-6/0(4)-
2: 2/3(4)-6'/0'(4)-1'/2'(4)-2'/3'(4)-
3: 3/4(3)-5/6(3)-5'/6'(3)-
4: 4/5(7)-
5: 0'/1'(7)-

Then we separate the edges (again, this is illustrative, can be just done in your head/computer):

0: 1-0/
1: 0-1/2-3'/4'-4'/5'-6/
2: 3'-2/3-6'/0'-1'/2'-2'/
3: 6'-3/4-5/6-5'/
4: 5-4/
5: 1'-0'/

0/1/2/3/4/5/6: 1-0/
0': 0-1/
1': 2-3'/
2': 4'-4'/
3': 5'-6/
0'': 3'-2/
1'': 3-6'/
2'': 0'-1'/
3'': 2'-2'/
0''': 6'-3/
1''' 4-5/
2''' 6-5'/
0@4/1@4/2@4/3@4/4@4/5@4/6@4: 5-4/
0@5/1@5/2@5/3@5/4@5/5@5/6@5: 1'-0'/

0/1/2/3/4/5/6: 1-0/ + 0': 0-1/
1': 2-3'/ + 0'': 3'-2/
2': 4'-4'/ ~combined with itself
3': 5'-6/ + 2''' 6-5'/
1'': 3-6'/ + 0''': 6'-3/
2'': 0'-1'/ + 0@5/1@5/2@5/3@5/4@5/5@5/6@5: 1'-0'/
3'': 2'-2'/ ~combined with itself
1''' 4-5/ + 0@4/1@4/2@4/3@4/4@4/5@4/6@4: 5-4/

(0 0')(1 0')(2 0')(3 0')(4 0')(5 0')(6 0')
(1' 0'')
(2')
(3' 2''')
(1'' 0''')
(2'' 0@5)(2'' 1@5)(2'' 2@5)(2'' 3@5)(2'' 4@5)(2'' 5@5)(2'' 6@5)
(3'')
(1''' 0@4)(1''' 1@4)(1''' 2@4)(1''' 3@4)(1''' 4@4)(1''' 5@4)(1''' 6@4)

Let's try this for the remaining three solutions:

(0 1)[2 2'][3 5'](4 5)[6 6'](0' 1')(3')(4')
0: 0/1(7)-
*1/*0(7)-
1: 1/2(4)-*2'/*1'(4)-*0'/*6'(4)-6/0(4)-
*0/*6(4)-6'/0'(4)-1'/2'(4)-*2/*1(4)-
2: 2/3(4)-*5'/*4'(4)-*4'/*3'(4)-*3'/*2'(4)-
*3/*2(4)-2'/3'(4)-3'/4'(4)-4'/5'(4)-
3: 3/4(3)-5/6(3)-*6'/*5'(3)-
*4/*3(3)-5'/6'(3)-*6/*5(3)-
4: 4/5(7)-
*5/*4(7)-
5: 0'/1'(7)-
*1'/*0'(7)-

0: 1-0/
1: 0-1/2-*2'/*1'-*0'/*6'-6/
2: *2'-2/3-*5'/*4'-*4'/*3'-*3'/
3: *5'-3/4-5/6-*6'/
4: 5-4/
5: 1'-0'/

0/1/2/3/4/5/6: 1-0/
0': 0-1/
1': 2-*2'/
2': *1'-*0'/
3': *6'-6/
0'': *2'-2/
1'': 3-*5'/
2'': *4'-*4'/
3'': *3'-*3'/
0''': *5'-3/
1''': 4-5/
2''': 6-*6'/
0@4/1@4/2@4/3@4/4@4/5@4/6@4: 5-4/
0@5/1@5/2@5/3@5/4@5/5@5/6@5: 1'-0'/

0/1/2/3/4/5/6: 1-0/ + 0': 0-1/
1': 2-*2'/ + 0'': *2'-2/
2': *1'-*0'/ X 0@5/1@5/2@5/3@5/4@5/5@5/6@5: 1'-0'/
3': *6'-6/ + 2''': 6-*6'/
1'': 3-*5'/ + 0''': *5'-3/
2'': *4'-*4'/ ~combined with itself
3'': *3'-*3'/ ~combined with itself
1''': 4-5/ + 0@4/1@4/2@4/3@4/4@4/5@4/6@4: 5-4/

(0 0')(1 0')(2 0')(3 0')(4 0')(5 0')(6 0')
(1' 0'')
[2' 0@5][2' 1@5][2' 2@5][2' 3@5][2' 4@5][2' 5@5][2' 6@5]
(3' 2''')
(1'' 0''')
(2'')
(3'')
(1''' 0@4)(1''' 1@4)(1''' 2@4)(1''' 3@4)(1''' 4@4)(1''' 5@4)(1''' 6@4)
---

(0 1)[2 2'][3 5'](4 5)[6 6'](0' 1')[3' 4']
0: 0/1(7)-
*1/*0(7)-
1: 1/2(4)-*2'/*1'(4)-*0'/*6'(4)-6/0(4)-
*0/*6(4)-6'/0'(4)-1'/2'(4)-*2/*1(4)-
2: 2/3(4)-*5'/*4'(4)-3'/4'(4)-*3'/*2'(4)-
*3/*2(4)-2'/3'(4)-*4'/*3'(4)-4'/5'(4)-
3: 3/4(3)-5/6(3)-*6'/*5'(3)-
*4/*3(3)-5'/6'(3)-*6/*5(3)-
4: 4/5(7)-
*5/*4(7)-
5: 0'/1'(7)-
*1'/*0'(7)-

0: 1-0/
1: 0-1/2-*2'/*1'-*0'/*6'-6/
2: *2'-2/3-*5'/*4'-3'/4'-*3'/
3: *5'-3/4-5/6-*6'/
4: 5-4/
5: 1'-0'/

0/1/2/3/4/5/6: 1-0/
0': 0-1/
1': 2-*2'/
2': *1'-*0'/
3': *6'-6/
0'': *2'-2/
1'': 3-*5'/
2'': *4'-3'/
3'': 4'-*3'/
0''': *5'-3/
1''': 4-5/
2''': 6-*6'/
0@4/1@4/2@4/3@4/4@4/5@4/6@4: 5-4/
0@5/1@5/2@5/3@5/4@5/5@5/6@5: 1'-0'/

0/1/2/3/4/5/6: 1-0/ + 0': 0-1/
1': 2-*2'/ + 0'': *2'-2/
2': *1'-*0'/ X 0@5/1@5/2@5/3@5/4@5/5@5/6@5: 1'-0'/
3': *6'-6/ + 2''': 6-*6'/
1'': 3-*5'/ + 0''': *5'-3/
2'': *4'-3'/ X 3'': 4'-*3'/
1''': 4-5/ + 0@4/1@4/2@4/3@4/4@4/5@4/6@4: 5-4/

(0 0')(1 0')(2 0')(3 0')(4 0')(5 0')(6 0')
(1' 0'')
[2' 0@5][2' 1@5][2' 2@5][2' 3@5][2' 4@5][2' 5@5][2' 6@5]
(3' 2''')
(1'' 0''')
[2'' 3'']
(1''' 0@4)(1''' 1@4)(1''' 2@4)(1''' 3@4)(1''' 4@4)(1''' 5@4)(1''' 6@4)

---

(0 1)[2 3'](3 6')(4 5)(6 5')(0' 1')[2' 4']
0: 0/1(7)-
*1/*0(7)-
1: 1/2(4)-*3'/*2'(4)-4'/5'(4)-6/0(4)-
*0/*6(4)-*5'/*4'(4)-2'/3'(4)-*2/*1(4)-
2: 2/3(4)-6'/0'(4)-1'/2'(4)-*4'/*3'(4)-
*3/*2(4)-3'/4'(4)-*2'/*1'(4)-*0'/*6'(4)-
3: 3/4(3)-5/6(3)-5'/6'(3)-
*4/*3(3)-*6'/*5'(3)-*6/*5(3)-
4: 4/5(7)-
*5/*4(7)-
5: 0'/1'(7)-
*1'/*0'(7)-

0: 1-0/
1: 0-1/2-*3'/*2'-4'/5'-6/
2: *3'-2/3-6'/0'-1'/2'-*4'/
3: 6'-3/4-5/6-5'/
4: 5-4/
5: 1'-0'/

0/1/2/3/4/5/6: 1-0/
0': 0-1/
1': 2-*3'/
2': *2'-4'/
3': 5'-6/
0'': *3'-2/
1'': 3-6'/
2'': 0'-1'/
3'': 2'-*4'/
0''': 6'-3/
1''': 4-5/
2''': 6-5'/
0@4/1@4/2@4/3@4/4@4/5@4/6@4: 5-4/
0@5/1@5/2@5/3@5/4@5/5@5/6@5: 1'-0'/

0/1/2/3/4/5/6: 1-0/ + 0': 0-1/
1': 2-*3'/ + 0'': *3'-2/
2': *2'-4'/ X 3'': 2'-*4'/
3': 5'-6/ + 2''': 6-5'/
1'': 3-6'/ + 0''': 6'-3/
2'': 0'-1'/ + 0@5/1@5/2@5/3@5/4@5/5@5/6@5: 1'-0'/
1''': 4-5/ + 0@4/1@4/2@4/3@4/4@4/5@4/6@4: 5-4/

(0 0')(1 0')(2 0')(3 0')(4 0')(5 0')(6 0')
(1' 0'')
[2' 3'']
(3' 2''')
(1'' 0''')
(2'' 0@5)(2'' 1@5)(2'' 2@5)(2'' 3@5)(2'' 4@5)(2'' 5@5)(2'' 6@5)
(1''' 0@4)(1''' 1@4)(1''' 2@4)(1''' 3@4)(1''' 4@4)(1''' 5@4)(1''' 6@4)

---

You might have noticed the X symbol in these three. Since we eliminated the mirror images, an edge of form x-y has either a partner of form y-x (signalized by "+"), OR a partner of form *x-*y (signalized by "X"). In the second case, the symbol will have brackets instead of parentheses. Note that if there is a tile with reflection symmetry, all symbols will use parentheses.

And so we have final form of the five solutions we've been working on:

(0 1')[0'][2'](6' 7')(8' 0'')
0: [0/0(12)-1'/2'(12)-*2'/*1'(12)-*0/*0(12)-*1'/*0'(12)-0'/1'(12)]x2
1: [2'/*2'(12)]x12
2: *0'/6'(5)-7'/8'(5)-0''/0''(5)-8'/*7'(5)-*6'/0'(5)
3/4: [6'/7'(5)]x5
[*7'/*6'(5)]x5
(0 1)(6 7)(2 0')(8 1')(2 2')(8 3')(2 4')(8 5')(2 6')(8 7')(2 8')(8 9')(2 10')(8 11')(3 4)(9 10)(5 0'')(11 0'')(1'' 0''')(1'' 1''')(1'' 2''')(1'' 3''')(1'' 4''')(2'' 3'')(4'' 0@4)(4'' 1@4)(4'' 2@4)(4'' 3@4)(4'' 4@4)

(0 1)(2 3')(3 6')(4 5)(6 5')(0' 1')(2')(4')
0: [0/1(7)]x7
[*1/*0(7)]x7
1: 1/2(4)-3'/4'(4)-4'/5'(4)-6/0(4)
*0/*6(4)-*5'/*4'(4)-*4'/*3'(4)-*2/*1(4)
2: 2/3(4)-6'/0'(4)-1'/2'(4)-2'/3'(4)
*3/*2(4)-*3'/*2'(4)-*2'/*1'(4)-*0'/*6'(4)
3: 3/4(3)-5/6(3)-5'/6'(3)
*4/*3(3)-*6'/*5'(3)-*6/*5(3)
4: [4/5(7)]x7
[*5/*4(7)]x7
5: [0'/1'(7)]x7
[*1'/*0'(7)]x7
(0 0')(1 0')(2 0')(3 0')(4 0')(5 0')(6 0')(1' 0'')(2')(3' 2''')(1'' 0''')(2'' 0@5)(2'' 1@5)(2'' 2@5)(2'' 3@5)(2'' 4@5)(2'' 5@5)(2'' 6@5)(3'')(1''' 0@4)(1''' 1@4)(1''' 2@4)(1''' 3@4)(1''' 4@4)(1''' 5@4)(1''' 6@4)

(0 1)[2 2'][3 5'](4 5)[6 6'](0' 1')(3')(4')
0: [0/1(7)]x7
[*1/*0(7)]x7
1: 1/2(4)-*2'/*1'(4)-*0'/*6'(4)-6/0(4)
*0/*6(4)-6'/0'(4)-1'/2'(4)-*2/*1(4)
2: 2/3(4)-*5'/*4'(4)-*4'/*3'(4)-*3'/*2'(4)
*3/*2(4)-2'/3'(4)-3'/4'(4)-4'/5'(4)
3: 3/4(3)-5/6(3)-*6'/*5'(3)
*4/*3(3)-5'/6'(3)-*6/*5(3)
4: [4/5(7)]x7
[*5/*4(7)]x7
5: [0'/1'(7)]x7
[*1'/*0'(7)]x7
(0 0')(1 0')(2 0')(3 0')(4 0')(5 0')(6 0')(1' 0'')[2' 0@5][2' 1@5][2' 2@5][2' 3@5][2' 4@5][2' 5@5][2' 6@5](3' 2''')(1'' 0''')(2'')(3'')(1''' 0@4)(1''' 1@4)(1''' 2@4)(1''' 3@4)(1''' 4@4)(1''' 5@4)(1''' 6@4)

(0 1)[2 2'][3 5'](4 5)[6 6'](0' 1')[3' 4']
0: [0/1(7)]x7
[*1/*0(7)]x7
1: 1/2(4)-*2'/*1'(4)-*0'/*6'(4)-6/0(4)
*0/*6(4)-6'/0'(4)-1'/2'(4)-*2/*1(4)
2: 2/3(4)-*5'/*4'(4)-3'/4'(4)-*3'/*2'(4)
*3/*2(4)-2'/3'(4)-*4'/*3'(4)-4'/5'(4)
3: 3/4(3)-5/6(3)-*6'/*5'(3)
*4/*3(3)-5'/6'(3)-*6/*5(3)
4: [4/5(7)]x7
[*5/*4(7)]x7
5: [0'/1'(7)]x7
[*1'/*0'(7)]x7
(0 0')(1 0')(2 0')(3 0')(4 0')(5 0')(6 0')(1' 0'')[2' 0@5][2' 1@5][2' 2@5][2' 3@5][2' 4@5][2' 5@5][2' 6@5](3' 2''')(1'' 0''')[2'' 3''](1''' 0@4)(1''' 1@4)(1''' 2@4)(1''' 3@4)(1''' 4@4)(1''' 5@4)(1''' 6@4)

(0 1)[2 3'](3 6')(4 5)(6 5')(0' 1')[2' 4']
0: [0/1(7)]x7
[*1/*0(7)]x7
1: 1/2(4)-*3'/*2'(4)-4'/5'(4)-6/0(4)
*0/*6(4)-*5'/*4'(4)-2'/3'(4)-*2/*1(4)
2: 2/3(4)-6'/0'(4)-1'/2'(4)-*4'/*3'(4)
*3/*2(4)-3'/4'(4)-*2'/*1'(4)-*0'/*6'(4)
3: 3/4(3)-5/6(3)-5'/6'(3)
*4/*3(3)-*6'/*5'(3)-*6/*5(3)
4: [4/5(7)]x7
[*5/*4(7)]x7
5: [0'/1'(7)]x7
[*1'/*0'(7)]x7
(0 0')(1 0')(2 0')(3 0')(4 0')(5 0')(6 0')(1' 0'')[2' 3''](3' 2''')(1'' 0''')(2'' 0@5)(2'' 1@5)(2'' 2@5)(2'' 3@5)(2'' 4@5)(2'' 5@5)(2'' 6@5)(1''' 0@4)(1''' 1@4)(1''' 2@4)(1''' 3@4)(1''' 4@4)(1''' 5@4)(1''' 6@4)

Yeah, except for one esthetic correction. The first {4,7}-class solution, "(0 1)(2 3')(3 6')(4 5)(6 5')(0' 1')(2')(4')" is chiral. You can see that because its edge-based Conway string never uses brackets even though it's allowed to. Note that the original vertex solution also uses no brackets. But the second solution from that class, "(0 1)[2 2'][3 5'](4 5)[6 6'](0' 1')(3')(4')" looks different -- its vertex and edge Conway strings both use brackets. But if we look closely, vertex string has brackets around combinations of tiles 0 and 1, and *only* those. The solution is still chiral. So, I make a small change on its final edge solution. From this:

(0 0')(1 0')(2 0')(3 0')(4 0')(5 0')(6 0')(1' 0'')[2' 0@5][2' 1@5][2' 2@5][2' 3@5][2' 4@5][2' 5@5][2' 6@5](3' 2''')(1'' 0''')(2'')(3'')(1''' 0@4)(1''' 1@4)(1''' 2@4)(1''' 3@4)(1''' 4@4)(1''' 5@4)(1''' 6@4)

To this:
(0 0')(1 0')(2 0')(3 0')(4 0')(5 0')(6 0')(1' 0'')(2' 0@5)(2' 1@5)(2' 2@5)(2' 3@5)(2' 4@5)(2' 5@5)(2' 6@5)(3' 2''')(1'' 0''')(2'')(3'')(1''' 0@4)(1''' 1@4)(1''' 2@4)(1''' 3@4)(1''' 4@4)(1''' 5@4)(1''' 6@4)

I have basically exchanged tile 5 with its mirror image because by doing that, I have completely eliminated brackets from the solution. Otherwise, HyperRogue would use different color for tile 5, since it would use its mirror image instead of the basic version. This correction is, of course, nowhere near required -- it just makes the solution look a bit nicer.

Similar for the third {4,7} solution. It, too, contains substring "[2' 0@5][2' 1@5][2' 2@5][2' 3@5][2' 4@5][2' 5@5][2' 6@5]", and I can reduce the amount of brackets by exchanging tile 5 with its mirror image. Note that in this case, brackets will *not* be eliminated completely; the tiling as a whole is not chiral, and so it has to use both enantiomers of each tile.

This "reduce brackets as much as possible" step is not really rigorous and I myself do it inconsistently.

Anyway, here are the solutions again, after this correction:

(0 1')[0'][2'](6' 7')(8' 0'')
0: [0/0(12)-1'/2'(12)-*2'/*1'(12)-*0/*0(12)-*1'/*0'(12)-0'/1'(12)]x2
1: [2'/*2'(12)]x12
2: *0'/6'(5)-7'/8'(5)-0''/0''(5)-8'/*7'(5)-*6'/0'(5)
3/4: [6'/7'(5)]x5
[*7'/*6'(5)]x5
(0 1)(6 7)(2 0')(8 1')(2 2')(8 3')(2 4')(8 5')(2 6')(8 7')(2 8')(8 9')(2 10')(8 11')(3 4)(9 10)(5 0'')(11 0'')(1'' 0''')(1'' 1''')(1'' 2''')(1'' 3''')(1'' 4''')(2'' 3'')(4'' 0@4)(4'' 1@4)(4'' 2@4)(4'' 3@4)(4'' 4@4)

(0 1)(2 3')(3 6')(4 5)(6 5')(0' 1')(2')(4')
0: [0/1(7)]x7
[*1/*0(7)]x7
1: 1/2(4)-3'/4'(4)-4'/5'(4)-6/0(4)
*0/*6(4)-*5'/*4'(4)-*4'/*3'(4)-*2/*1(4)
2: 2/3(4)-6'/0'(4)-1'/2'(4)-2'/3'(4)
*3/*2(4)-*3'/*2'(4)-*2'/*1'(4)-*0'/*6'(4)
3: 3/4(3)-5/6(3)-5'/6'(3)
*4/*3(3)-*6'/*5'(3)-*6/*5(3)
4: [4/5(7)]x7
[*5/*4(7)]x7
5: [0'/1'(7)]x7
[*1'/*0'(7)]x7
(0 0')(1 0')(2 0')(3 0')(4 0')(5 0')(6 0')(1' 0'')(2')(3' 2''')(1'' 0''')(2'' 0@5)(2'' 1@5)(2'' 2@5)(2'' 3@5)(2'' 4@5)(2'' 5@5)(2'' 6@5)(3'')(1''' 0@4)(1''' 1@4)(1''' 2@4)(1''' 3@4)(1''' 4@4)(1''' 5@4)(1''' 6@4)

(0 1)[2 2'][3 5'](4 5)[6 6'](0' 1')(3')(4')
0: [0/1(7)]x7
[*1/*0(7)]x7
1: 1/2(4)-*2'/*1'(4)-*0'/*6'(4)-6/0(4)
*0/*6(4)-6'/0'(4)-1'/2'(4)-*2/*1(4)
2: 2/3(4)-*5'/*4'(4)-*4'/*3'(4)-*3'/*2'(4)
*3/*2(4)-2'/3'(4)-3'/4'(4)-4'/5'(4)
3: 3/4(3)-5/6(3)-*6'/*5'(3)
*4/*3(3)-5'/6'(3)-*6/*5(3)
4: [4/5(7)]x7
[*5/*4(7)]x7
5: [0'/1'(7)]x7
[*1'/*0'(7)]x7
(0 0')(1 0')(2 0')(3 0')(4 0')(5 0')(6 0')(1' 0'')(2' 0@5)(2' 1@5)(2' 2@5)(2' 3@5)(2' 4@5)(2' 5@5)(2' 6@5)(3' 2''')(1'' 0''')(2'')(3'')(1''' 0@4)(1''' 1@4)(1''' 2@4)(1''' 3@4)(1''' 4@4)(1''' 5@4)(1''' 6@4)

(0 1)[2 2'][3 5'](4 5)[6 6'](0' 1')[3' 4']
0: [0/1(7)]x7
[*1/*0(7)]x7
1: 1/2(4)-*2'/*1'(4)-*0'/*6'(4)-6/0(4)
*0/*6(4)-6'/0'(4)-1'/2'(4)-*2/*1(4)
2: 2/3(4)-*5'/*4'(4)-3'/4'(4)-*3'/*2'(4)
*3/*2(4)-2'/3'(4)-*4'/*3'(4)-4'/5'(4)
3: 3/4(3)-5/6(3)-*6'/*5'(3)
*4/*3(3)-5'/6'(3)-*6/*5(3)
4: [4/5(7)]x7
[*5/*4(7)]x7
5: [0'/1'(7)]x7
[*1'/*0'(7)]x7
(0 0')(1 0')(2 0')(3 0')(4 0')(5 0')(6 0')(1' 0'')(2' 0@5)(2' 1@5)(2' 2@5)(2' 3@5)(2' 4@5)(2' 5@5)(2' 6@5)(3' 2''')(1'' 0''')[2'' 3''](1''' 0@4)(1''' 1@4)(1''' 2@4)(1''' 3@4)(1''' 4@4)(1''' 5@4)(1''' 6@4)

(0 1)[2 3'](3 6')(4 5)(6 5')(0' 1')[2' 4']
0: [0/1(7)]x7
[*1/*0(7)]x7
1: 1/2(4)-*3'/*2'(4)-4'/5'(4)-6/0(4)
*0/*6(4)-*5'/*4'(4)-2'/3'(4)-*2/*1(4)
2: 2/3(4)-6'/0'(4)-1'/2'(4)-*4'/*3'(4)
*3/*2(4)-3'/4'(4)-*2'/*1'(4)-*0'/*6'(4)
3: 3/4(3)-5/6(3)-5'/6'(3)
*4/*3(3)-*6'/*5'(3)-*6/*5(3)
4: [4/5(7)]x7
[*5/*4(7)]x7
5: [0'/1'(7)]x7
[*1'/*0'(7)]x7
(0 0')(1 0')(2 0')(3 0')(4 0')(5 0')(6 0')(1' 0'')[2' 3''](3' 2''')(1'' 0''')(2'' 0@5)(2'' 1@5)(2'' 2@5)(2'' 3@5)(2'' 4@5)(2'' 5@5)(2'' 6@5)(1''' 0@4)(1''' 1@4)(1''' 2@4)(1''' 3@4)(1''' 4@4)(1''' 5@4)(1''' 6@4)

!!!Step 5: Building *.tes file

Let's go right ahead and show the syntax of *.tes file for the {12,10}-class solution:

## {12,10} class hybrid, (12,12,12,12,12,12,12,12,12,12)+(5,5,5,5,5,5,12,12,12,12,12)+(5,5,5,5,5,5,5,5,5,5,5,5), R10AS12
h2.
distunit(edge(12,10))
let(u5 = regangle(1, 5))
let(u12 = regangle(1, 12))
unittile(u12,u12,u12,u12,u12,u12,u12,u12,u12,u12,u12,u12)
unittile(u12,u12,u12,u12,u12,u12,u12,u12,u12,u12,u12,u12)
unittile(u5,u5,u5,u5,u5)
unittile(u5,u5,u5,u5,u5)
unittile(u5,u5,u5,u5,u5)
conway("(0 1)(6 7)(2 0')(8 1')(2 2')(8 3')(2 4')(8 5')(2 6')(8 7')(2 8')(8 9')(2 10')(8 11')(3 4)(9 10)(5 0'')(11 0'')(1'' 0''')(1'' 1''')(1'' 2''')(1'' 3''')(1'' 4''')(2'' 3'')(4'' 0@4)(4'' 1@4)(4'' 2@4)(4'' 3@4)(4'' 4@4)")

The first row is the header, a comment line starting with ## that describes what this is about. When I build multiple solutions from the same setting, I generally use ", solution " and append the appropriate number.
"h2." specifies that this is hyperbolic tiling. If we had spherical or Euclidean tiling, we could also display it, but we'd have to change this row.

"distunit" specifies how we measure the distance in the hyperbolic plane. In this case, the edge of {12,10} is set as a unit. We combine several different vertices, but they all share this edge, so any of them can be used.

The "let" rows define angular measures. "regangle(1, 5)" means "take a regular pentagon of side 1 (as measured by previously used distunit command), and compute its inner angle".

Actually, in this case, both pentagons and dodecagons have rational angles and they can be written directly, but that's not the usual case, so I'm leaving it as it is for now.

Next, the "unittile" rows. They are in the same order as polygons in the solution and I think it can be seen pretty clearly how they work. One defines a dodecagon using 12 angles of size u12, the other defines a pentagon using 5 angles of size u5. Each polygon in the solution gets its own unittile definition; the solution uses two dodecagons and three pentagons.

Finally, the "conway" row which has the final version of the solution string.

And that's it! Once built this way, this should work!

Let's do files for the four {4,7}-class solutions:

## {4,7} class hybrid, (3,4,4,7,4,3,7)+(3,4,4,4,4,7,4), solution 1
h2.
distunit(edge(4,7))
let(u3 = regangle(1, 3))
let(u4 = regangle(1, 4))
let(u7 = regangle(1, 7))
unittile(u7,u7,u7,u7,u7,u7,u7)
unittile(u4,u4,u4,u4)
unittile(u4,u4,u4,u4)
unittile(u3,u3,u3)
unittile(u7,u7,u7,u7,u7,u7,u7)
unittile(u7,u7,u7,u7,u7,u7,u7)
conway("(0 0')(1 0')(2 0')(3 0')(4 0')(5 0')(6 0')(1' 0'')(2')(3' 2''')(1'' 0''')(2'' 0@5)(2'' 1@5)(2'' 2@5)(2'' 3@5)(2'' 4@5)(2'' 5@5)(2'' 6@5)(3'')(1''' 0@4)(1''' 1@4)(1''' 2@4)(1''' 3@4)(1''' 4@4)(1''' 5@4)(1''' 6@4)")

## {4,7} class hybrid, (3,4,4,7,4,3,7)+(3,4,4,4,4,7,4), solution 2
h2.
distunit(edge(4,7))
let(u3 = regangle(1, 3))
let(u4 = regangle(1, 4))
let(u7 = regangle(1, 7))
unittile(u7,u7,u7,u7,u7,u7,u7)
unittile(u4,u4,u4,u4)
unittile(u4,u4,u4,u4)
unittile(u3,u3,u3)
unittile(u7,u7,u7,u7,u7,u7,u7)
unittile(u7,u7,u7,u7,u7,u7,u7)
conway("(0 0')(1 0')(2 0')(3 0')(4 0')(5 0')(6 0')(1' 0'')(2' 0@5)(2' 1@5)(2' 2@5)(2' 3@5)(2' 4@5)(2' 5@5)(2' 6@5)(3' 2''')(1'' 0''')(2'')(3'')(1''' 0@4)(1''' 1@4)(1''' 2@4)(1''' 3@4)(1''' 4@4)(1''' 5@4)(1''' 6@4)")

## {4,7} class hybrid, (3,4,4,7,4,3,7)+(3,4,4,4,4,7,4), solution 3
h2.
distunit(edge(4,7))
let(u3 = regangle(1, 3))
let(u4 = regangle(1, 4))
let(u7 = regangle(1, 7))
unittile(u7,u7,u7,u7,u7,u7,u7)
unittile(u4,u4,u4,u4)
unittile(u4,u4,u4,u4)
unittile(u3,u3,u3)
unittile(u7,u7,u7,u7,u7,u7,u7)
unittile(u7,u7,u7,u7,u7,u7,u7)
conway("(0 0')(1 0')(2 0')(3 0')(4 0')(5 0')(6 0')(1' 0'')(2' 0@5)(2' 1@5)(2' 2@5)(2' 3@5)(2' 4@5)(2' 5@5)(2' 6@5)(3' 2''')(1'' 0''')[2'' 3''](1''' 0@4)(1''' 1@4)(1''' 2@4)(1''' 3@4)(1''' 4@4)(1''' 5@4)(1''' 6@4)")

## {4,7} class hybrid, (3,4,4,7,4,3,7)+(3,4,4,4,4,7,4), solution 4
h2.
distunit(edge(4,7))
let(u3 = regangle(1, 3))
let(u4 = regangle(1, 4))
let(u7 = regangle(1, 7))
unittile(u7,u7,u7,u7,u7,u7,u7)
unittile(u4,u4,u4,u4)
unittile(u4,u4,u4,u4)
unittile(u3,u3,u3)
unittile(u7,u7,u7,u7,u7,u7,u7)
unittile(u7,u7,u7,u7,u7,u7,u7)
conway("(0 0')(1 0')(2 0')(3 0')(4 0')(5 0')(6 0')(1' 0'')[2' 3''](3' 2''')(1'' 0''')(2'' 0@5)(2'' 1@5)(2'' 2@5)(2'' 3@5)(2'' 4@5)(2'' 5@5)(2'' 6@5)(1''' 0@4)(1''' 1@4)(1''' 2@4)(1''' 3@4)(1''' 4@4)(1''' 5@4)(1''' 6@4)")
Marek14
Pentonian
 
Posts: 1191
Joined: Sat Jul 16, 2005 6:40 pm

Re: Almost-uniform tilings?

Postby mr_e_man » Tue Feb 16, 2021 3:59 am

mr_e_man wrote:I proved that any CRF hyperbolic tiling with at least one vertex of the form 3.m.n or 4.m.n must be uniform, the only exception being 4.n.2n which can combine with 4.n.4.3 or 4.n.3.4 to make a modified uniform tiling:
Marek14 wrote:I am aware that edge of {3,2n} is generally equal to {2n,n}, and also that edge of (3,4,n,4) is equal to (4,n,2n) (this is the principle behind Johnson solids like diminished rhombicosidodecahedra, I've been able to produce several "diminished" and "gyrated" periodic variants of (3,4,7,4) thanks to that).



There I was assuming circular (finite) polygons. We may allow horocyclic polygons, in which case the above still holds, with another exception: 4.∞.∞ can combine with 4.3.4.∞, 3.4.4.∞, 3.4.3.4.4, and/or 3.3.4.4.4 . And no other vertex configuration has that edge length, arcosh(9/7) = 0.73899794 .

I think we shouldn't allow hypercyclic polygons, because there's a continuum of possible angles, even with a fixed edge length.

Next for me to consider is 5.m.n .
ΓΔΘΛΞΠΣΦΨΩ αβγδεζηθϑικλμνξοπρϱσςτυϕφχψωϖ °±∓½⅓⅔¼¾×÷†‡• ⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎
ℕℤℚℝℂ∂¬∀∃∅∆∇∈∉∋∌∏∑ ∗∘∙√∛∜∝∞∧∨∩∪∫≅≈≟≠≡≤≥⊂⊃⊆⊇ ⊕⊖⊗⊘⊙⌈⌉⌊⌋⌜⌝⌞⌟〈〉⟨⟩
mr_e_man
Tetronian
 
Posts: 538
Joined: Tue Sep 18, 2018 4:10 am

Re: Almost-uniform tilings?

Postby Marek14 » Tue Feb 16, 2021 6:40 am

mr_e_man wrote:
mr_e_man wrote:I proved that any CRF hyperbolic tiling with at least one vertex of the form 3.m.n or 4.m.n must be uniform, the only exception being 4.n.2n which can combine with 4.n.4.3 or 4.n.3.4 to make a modified uniform tiling:
Marek14 wrote:I am aware that edge of {3,2n} is generally equal to {2n,n}, and also that edge of (3,4,n,4) is equal to (4,n,2n) (this is the principle behind Johnson solids like diminished rhombicosidodecahedra, I've been able to produce several "diminished" and "gyrated" periodic variants of (3,4,7,4) thanks to that).



There I was assuming circular (finite) polygons. We may allow horocyclic polygons, in which case the above still holds, with another exception: 4.∞.∞ can combine with 4.3.4.∞, 3.4.4.∞, 3.4.3.4.4, and/or 3.3.4.4.4 . And no other vertex configuration has that edge length, arcosh(9/7) = 0.73899794 .

I think we shouldn't allow hypercyclic polygons, because there's a continuum of possible angles, even with a fixed edge length.

Next for me to consider is 5.m.n .


Here are two examples of another group I've considered, using the relationship that edge of {12,4} is twice of that of r{12,3}. I'm running a bigger search for small ratios, but so far I haven't found any examples of tilings with edge ratios other than 1:1 or 2:1.
Attachments
312 AS4R12 a.png
(705.41 KiB) Not downloaded yet
312 FS2bR6 a.png
(722.92 KiB) Not downloaded yet
Marek14
Pentonian
 
Posts: 1191
Joined: Sat Jul 16, 2005 6:40 pm

Re: Almost-uniform tilings?

Postby mr_e_man » Tue Feb 16, 2021 6:38 pm

mr_e_man wrote:
mr_e_man wrote:I proved that any CRF hyperbolic tiling with at least one vertex of the form 3.m.n or 4.m.n must be uniform, the only exception being 4.n.2n which can combine with 4.n.4.3 or 4.n.3.4 to make a modified uniform tiling:
Marek14 wrote:I am aware that edge of {3,2n} is generally equal to {2n,n}, and also that edge of (3,4,n,4) is equal to (4,n,2n) (this is the principle behind Johnson solids like diminished rhombicosidodecahedra, I've been able to produce several "diminished" and "gyrated" periodic variants of (3,4,7,4) thanks to that).



There I was assuming circular (finite) polygons. We may allow horocyclic polygons, in which case the above still holds, with another exception: 4.∞.∞ can combine with 4.3.4.∞, 3.4.4.∞, 3.4.3.4.4, and/or 3.3.4.4.4 . And no other vertex configuration has that edge length, arcosh(9/7) = 0.73899794 .

I think we shouldn't allow hypercyclic polygons, because there's a continuum of possible angles, even with a fixed edge length.

Next for me to consider is 5.m.n .


And 6.m.n, 7.m.n, 8.m.n, and so on with trivalent vertices. All done; all must be uniform (of course assuming m and n ≥ 5).
ΓΔΘΛΞΠΣΦΨΩ αβγδεζηθϑικλμνξοπρϱσςτυϕφχψωϖ °±∓½⅓⅔¼¾×÷†‡• ⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎
ℕℤℚℝℂ∂¬∀∃∅∆∇∈∉∋∌∏∑ ∗∘∙√∛∜∝∞∧∨∩∪∫≅≈≟≠≡≤≥⊂⊃⊆⊇ ⊕⊖⊗⊘⊙⌈⌉⌊⌋⌜⌝⌞⌟〈〉⟨⟩
mr_e_man
Tetronian
 
Posts: 538
Joined: Tue Sep 18, 2018 4:10 am

Re: Almost-uniform tilings?

Postby Marek14 » Thu Feb 18, 2021 11:03 pm

I just discovered an interesting hybrid group similar to {4,7}. It's (5,6)^5, i.e. five pentagons and five hexagons around a vertex. A combination of pentagon and hexagon can be replaced by a square and a dodecagon, leading to 4 mixed vertices and pure (4,12)^5.
Marek14
Pentonian
 
Posts: 1191
Joined: Sat Jul 16, 2005 6:40 pm

Re: Almost-uniform tilings?

Postby mr_e_man » Fri Feb 19, 2021 7:43 am

Any vertex of the form 3.3.4.n or 3.3.5.n doesn't share its edge length with anything else, the only exception being 3.3.5.∞ which can combine with 3.5.5.5; the shared length s has sech(s/2) = √(9 - 5φ) = 0.95385 . The specific arrangement 3.3.5.∞ doesn't work in a tiling; only 3.5.3.∞ works. To construct an example, I tried modifying the tiling with pentagonal symmetry we discussed before, and here's what I found:

hyperbolicTiling353∞.png
hyperbolicTiling353∞.png (45.8 KiB) Viewed 21354 times

The brighter pentagons and edges are centres of rotational symmetry.
ΓΔΘΛΞΠΣΦΨΩ αβγδεζηθϑικλμνξοπρϱσςτυϕφχψωϖ °±∓½⅓⅔¼¾×÷†‡• ⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎
ℕℤℚℝℂ∂¬∀∃∅∆∇∈∉∋∌∏∑ ∗∘∙√∛∜∝∞∧∨∩∪∫≅≈≟≠≡≤≥⊂⊃⊆⊇ ⊕⊖⊗⊘⊙⌈⌉⌊⌋⌜⌝⌞⌟〈〉⟨⟩
mr_e_man
Tetronian
 
Posts: 538
Joined: Tue Sep 18, 2018 4:10 am

Re: Almost-uniform tilings?

Postby mr_e_man » Mon Feb 22, 2021 11:46 pm

I've completed my analysis of 3.3.m.n vertices.

The only other edge length matches I found were 3.3.10.10 = 3.4.5.10 = 4.4.5.5 which you already found (with sech(s/2) = 2/√(φ + 3) = 0.93068), and 3.3.∞.∞ = 3.4.6.∞ = 4.4.6.6 which Klitzing found (with sech(s/2) = 2/√5 = 0.8944). Also, not quite a match, but very close: 3.3.105.3030 ≈ 3.3.3.4.15 (0.89458746364 ≈ 0.89458746363).

Most cases required only a finite number of calculations, and then I could use some inequality to cut off the infinity. There were two cases that wouldn't give me a finite cutoff: comparing 3.3.m.n to 3.3.k.l (where k and l are different from m and n), and comparing 3.3.m.n to 3.4.6.k; but even if the edges match, it doesn't work out topologically; the different vertices can't be combined in a tiling. With m = n, we might have a 3.n.3.n vertex next to a 3.4.6.n or 3.6.4.n vertex, but that requires the square and hexagon to make a straight angle, which only happens with n = ∞.

A hyperbolic tiling with a 3.3.m.n vertex (m ≠ n, both ≥ 6) only works when m and n are multiples of 3, and the result is unique. Here's an illustration for 3.3.6.9, along with some analogous non-hyperbolic tilings:

hyperbolicTiling3369.png
hyperbolicTiling3369.png (50.69 KiB) Viewed 21343 times
ΓΔΘΛΞΠΣΦΨΩ αβγδεζηθϑικλμνξοπρϱσςτυϕφχψωϖ °±∓½⅓⅔¼¾×÷†‡• ⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎
ℕℤℚℝℂ∂¬∀∃∅∆∇∈∉∋∌∏∑ ∗∘∙√∛∜∝∞∧∨∩∪∫≅≈≟≠≡≤≥⊂⊃⊆⊇ ⊕⊖⊗⊘⊙⌈⌉⌊⌋⌜⌝⌞⌟〈〉⟨⟩
mr_e_man
Tetronian
 
Posts: 538
Joined: Tue Sep 18, 2018 4:10 am

Re: Almost-uniform tilings?

Postby Marek14 » Tue Feb 23, 2021 9:21 am

What exactly do you mean by "the result is unique"? That there is only one tiling that combines 3.3.m.n with 3.m.3.n?

Yeah, that seems to work. Specifically, it's the solution [0 0'][1](2 2')(3) under my method, if vertices are written as
0/1(n)-
1/2(m)-
2/3(3)-
3/0(3)-
*0/*3(3)-
*1/*0(n)-
*2/*1(m)-
*3/*2(3)-

0'/*0'(n)-
*0'/2'(3)-
2'/*2'(m)-
*2'/0'(3)-

This solution will lead to the following polygons:
[0 0'][1](2 2')(3)
0/1(n)-*1/*0(n)-0'/*0'(n)-
1/2(m)-2'/*2'(m)-*2/*1(m)-
2/3(3)-3/0(3)-*0'/2'(3)-
*0/*3(3)-*3/*2(3)-*2'/0'(3)-

The result has 4 kinds of polygons: two triangles, one m-gon and one n-gon, and since both m-gon and n-gon have period 3, this means they must be both divisible by 3.

BTW, here's one really weird relation I found:

(3,12n)^20n has the same edge as (12n,20n)^15n

((3,12n)^20n is meant as 20n triangles and 20n 12n-gons per vertex.)
I verified it numerically up to (3,1200)^2000 + (1200,2000)^1500.
Marek14
Pentonian
 
Posts: 1191
Joined: Sat Jul 16, 2005 6:40 pm

Re: Almost-uniform tilings?

Postby mr_e_man » Tue Feb 23, 2021 3:50 pm

Marek14 wrote:What exactly do you mean by "the result is unique"? That there is only one tiling that combines 3.3.m.n with 3.m.3.n?


I mean there is only one tiling with at least one 3.3.m.n vertex (or at least one 3.m.3.n vertex), allowing any other vertex types in the same tiling, and allowing any symmetry or asymmetry.

I didn't find any other vertex types with the same edge length. Even if they do exist, you can start to construct a tiling with something like 3.m.3.n next to 3.4.6.n, so the triangle's third vertex has the form 4.3.m.(...), which must be 4.3.m.6 because my edge length calculations have eliminated all other vertex types; but 4.3.m.6 and 3.4.6.n have different lengths when m≠n, so the triangle's third vertex cannot be completed. Or you can start with 3.3.m.n next to 3.3.k.l (sharing the same pair of triangles), so one triangle's third vertex has the form k.3.n.(...), which must be k.3.n.3 because my calculations have eliminated all other vertex types; but k.3.n.3 and 3.3.m.n have different edge lengths when k≠m, so the triangle's third vertex cannot be completed. Etc. Thus, 3.3.m.n can combine only with 3.m.3.n .

(Perhaps I should mention, because of the possibility of shared hexagons, that I considered 3.3.6.n separately, and it definitely doesn't share its edge length with any 3.4.6.k .)

If you start with 3.m.3.n next to another 3.m.3.n, sharing a triangle and the m-gon, then the triangle's third vertex has the form n.3.n.(...), which can only be n.3.n.3, but that has a different edge length when m≠n. So a 3.m.3.n vertex must be adjacent to 3.3.m.n vertices.

If you start with 3.3.m.n, the other side of the pair of triangles must be another 3.3.m.n vertex, with either the same or opposite orientation. Then one triangle's third vertex is either m.3.n.(...) or n.3.n.(...), but the latter cannot be completed. So the orientation is uniquely determined.

Continuing in this way, you're forced to make a tiling like that illustrated in my previous post.
ΓΔΘΛΞΠΣΦΨΩ αβγδεζηθϑικλμνξοπρϱσςτυϕφχψωϖ °±∓½⅓⅔¼¾×÷†‡• ⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎
ℕℤℚℝℂ∂¬∀∃∅∆∇∈∉∋∌∏∑ ∗∘∙√∛∜∝∞∧∨∩∪∫≅≈≟≠≡≤≥⊂⊃⊆⊇ ⊕⊖⊗⊘⊙⌈⌉⌊⌋⌜⌝⌞⌟〈〉⟨⟩
mr_e_man
Tetronian
 
Posts: 538
Joined: Tue Sep 18, 2018 4:10 am

Re: Almost-uniform tilings?

Postby Marek14 » Tue Feb 23, 2021 5:43 pm

Ah, I see. You're making an assumption here, though, that two 3.3.m.n vertices are equivalent. They don't have to be - you can have them in different orbits.
Your solution is unique if 3.3.m.n and 3.m.3.n vertices form one orbit each, but this should be stated.

Otherwise, finding alternate tilings is easy.

One new result that might interest you: {30,6} can have four 30-gons replaced by five pentagons, leading to vertex 5.5.5.5.5.30.30 . I have already found some examples of hybrid tilings there, but there are hundreds even with just two vertex types, so full analysis is not the best idea right now.
Marek14
Pentonian
 
Posts: 1191
Joined: Sat Jul 16, 2005 6:40 pm

Re: Almost-uniform tilings?

Postby mr_e_man » Tue Feb 23, 2021 6:27 pm

Where do I appear to make such an assumption?

I'm not using symmetry in any form, except regularity of the polygons themselves. I'm considering general CRF tilings.

Well, in 3.3.6.6 I coloured the tiles by a sub-symmetry, but that's just to show the connection between the different tilings. And I gave the 3.5.3.∞ tiling symmetry just to make it easier to construct; there may be non-periodic forms with 3.5.3.∞ .
Last edited by mr_e_man on Tue Feb 23, 2021 6:56 pm, edited 1 time in total.
ΓΔΘΛΞΠΣΦΨΩ αβγδεζηθϑικλμνξοπρϱσςτυϕφχψωϖ °±∓½⅓⅔¼¾×÷†‡• ⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎
ℕℤℚℝℂ∂¬∀∃∅∆∇∈∉∋∌∏∑ ∗∘∙√∛∜∝∞∧∨∩∪∫≅≈≟≠≡≤≥⊂⊃⊆⊇ ⊕⊖⊗⊘⊙⌈⌉⌊⌋⌜⌝⌞⌟〈〉⟨⟩
mr_e_man
Tetronian
 
Posts: 538
Joined: Tue Sep 18, 2018 4:10 am

Re: Almost-uniform tilings?

Postby Marek14 » Tue Feb 23, 2021 6:54 pm

Ah, I made a mistake. I knew of more solutions, but they all had m=n -- in that case, not even divisibility by 3 is required. But for m != n, it seems you are right.

mr_e_man wrote:Where do I appear to make such an assumption?

I'm not using symmetry in any form, except regularity of the polygons themselves. I'm considering general CRF tilings.
Marek14
Pentonian
 
Posts: 1191
Joined: Sat Jul 16, 2005 6:40 pm

Re: Almost-uniform tilings?

Postby mr_e_man » Wed Feb 24, 2021 5:39 am

I've devised an algorithm to find all vertex configurations with a given edge length s (or given x = sech(s/2)), thus proving that there are only finitely many.

Define θ(n, x) = 2 arcsin(cos(π/n) x), as the angle of an n-gon with edge length s. In particular, a triangle has θ(3,x)=2arcsin(1/2 x), which is the minimum. A horogon has θ(∞,x)=2arcsin(x), which is the maximum. θ(n,x) increases with n, and increases with x.
Find the largest integer M such that M θ(3,x) ≤ 2π (that is, calculate M = ⌊2π / θ(3,x)⌋). Then the angle sum of any M+1 or more polygons is greater than 2π (=360°).
Find the smallest integer L such that L θ(∞,x) ≥ 2π (that is, calculate L = ⌈2π / θ(∞,x)⌉). Then the angle sum of any L-1 or fewer polygons is less than 2π.
Repeat the following, for each possible valence N (L ≤ N ≤ M):

The required average angle is α1 = 2π / N. The largest angle at the vertex must be ≥ α1, and the smallest angle must be ≤ α1.
Find the largest integer m1 such that θ(m1,x) ≤ α1 (that is, calculate m1 = ⌊π / arccos(sin(α1/2)/x)⌋). Then the size n1 of the smallest polygon must have 3 ≤ n1 ≤ m1.
(No such largest m1 exists if the maximum angle θ(∞,x) < α1; but in that case the sum of angles is too small, being at most N θ(∞,x) < N α1 = 2π, so there is no solution; skip to the next value of N.
And if θ(∞,x) = α1, then the only solution is ∞.∞.∞...∞, that is, an {∞,N} vertex (anything else is too small); record this and skip to the next value of N.
Otherwise θ(∞,x) > α1, and such an m1 exists.)
Repeat the following, for each possible size n1 (3 ≤ n1 ≤ m1) of the smallest polygon:

The required average of the remaining angles is α2 = (2π - θ(n1,x)) / (N - 1) ≥ α1. The largest angle must be ≥ α2, and the smallest remaining angle must be ≤ α2.
Find the largest integer m2 such that θ(m2,x) ≤ α2 (that is, calculate m2 = ⌊π / arccos(sin(α2/2)/x)⌋; note that m2 ≥ m1). Then the size n2 of the smallest remaining polygon must have n1 ≤ n2 ≤ m2.
(No such largest m2 exists if θ(∞,x) < α2; but in that case the sum of remaining angles is too small, being at most (N-1) θ(∞,x) < (N-1) α2 = 2π - θ(n1,x), so there is no solution; skip to the next value of n1.
And if θ(∞,x) = α2, then the only solution is n1.∞.∞...∞ (anything else is too small); record this and skip to the next value of n1.
Otherwise θ(∞,x) > α2, and such an m2 exists.)
Repeat the following, for each possible size n2 (n1 ≤ n2 ≤ m2) of the second smallest polygon:

The required average of the remaining angles is α3 = (2π - θ(n1,x) - θ(n2,x)) / (N - 2) ≥ α2. The largest angle must be ≥ α3, and the smallest remaining angle must be ≤ α3.
Find the largest integer m3 such that θ(m3,x) ≤ α3 (that is, calculate m3 = ⌊π / arccos(sin(α3/2)/x)⌋; note that m3 ≥ m2). Then the size n3 of the smallest remaining polygon must have n2 ≤ n3 ≤ m3.
(No such largest m3 exists if θ(∞,x) < α3; but in that case the sum of remaining angles is too small, being at most (N-2) θ(∞,x) < (N-2) α3 = 2π - θ(n1,x) - θ(n2,x), so there is no solution; skip to the next value of n2.
And if θ(∞,x) = α3, then the only solution is n1.n2.∞...∞ (anything else is too small); record this and skip to the next value of n2.
Otherwise θ(∞,x) > α3, and such an m3 exists.)
Repeat the following, for each possible size n3 (n2 ≤ n3 ≤ m3) of the third smallest polygon:

Etc.
No need to repeat for the largest polygon; just set nN = mN.
If (and only if) θ(mN,x) = αN, then the angle sum is θ(n1,x) + θ(n2,x) + θ(n3,x) + ... + θ(nN,x) = 2π; record the vertex configuration n1.n2.n3...nN .
Last edited by mr_e_man on Thu Feb 25, 2021 3:45 am, edited 2 times in total.
ΓΔΘΛΞΠΣΦΨΩ αβγδεζηθϑικλμνξοπρϱσςτυϕφχψωϖ °±∓½⅓⅔¼¾×÷†‡• ⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎
ℕℤℚℝℂ∂¬∀∃∅∆∇∈∉∋∌∏∑ ∗∘∙√∛∜∝∞∧∨∩∪∫≅≈≟≠≡≤≥⊂⊃⊆⊇ ⊕⊖⊗⊘⊙⌈⌉⌊⌋⌜⌝⌞⌟〈〉⟨⟩
mr_e_man
Tetronian
 
Posts: 538
Joined: Tue Sep 18, 2018 4:10 am

Re: Almost-uniform tilings?

Postby Marek14 » Wed Feb 24, 2021 8:21 am

Well, it's clear that there are only finite number of solutions. If you have a configuration of n polygons, then there will definitely be k > n such that any configuration of k polygons will have greater side length (since the smallest such configuration, {3,k} has edge that grows without limit). And the sequence {m,n} grows with a limit given by {∞,n}, and for some m it will surpass the edge of the original configuration, putting upper limit on size of polygons that can appear there.

But of course, this is nonconstructive. Your approach seems more interesting.

For testing, I'm attaching a file with compilation of results so far.
Attachments
all results 2021-02-24.txt
(3.62 KiB) Downloaded 493 times
Marek14
Pentonian
 
Posts: 1191
Joined: Sat Jul 16, 2005 6:40 pm

Re: Almost-uniform tilings?

Postby mr_e_man » Wed Feb 24, 2021 3:06 pm

Marek14 wrote:Well, it's clear that there are only finite number of solutions. If you have a configuration of n polygons, then there will definitely be k > n such that any configuration of k polygons will have greater side length (since the smallest such configuration, {3,k} has edge that grows without limit). And the sequence {m,n} grows with a limit given by {∞,n}, and for some m it will surpass the edge of the original configuration, putting upper limit on size of polygons that can appear there.


No, some polygons could be larger than m while others are smaller than m.

Take 3.5.5.5, for example; {5,4} surpasses this, but there can be 4 polygons with some larger than pentagons: 3.3.5.∞ .

Or take 4.4.4.4.4.4.4 and 3.4.4.4.4.4.7 .
ΓΔΘΛΞΠΣΦΨΩ αβγδεζηθϑικλμνξοπρϱσςτυϕφχψωϖ °±∓½⅓⅔¼¾×÷†‡• ⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎
ℕℤℚℝℂ∂¬∀∃∅∆∇∈∉∋∌∏∑ ∗∘∙√∛∜∝∞∧∨∩∪∫≅≈≟≠≡≤≥⊂⊃⊆⊇ ⊕⊖⊗⊘⊙⌈⌉⌊⌋⌜⌝⌞⌟〈〉⟨⟩
mr_e_man
Tetronian
 
Posts: 538
Joined: Tue Sep 18, 2018 4:10 am

Re: Almost-uniform tilings?

Postby Marek14 » Wed Feb 24, 2021 6:39 pm

mr_e_man wrote:
Marek14 wrote:Well, it's clear that there are only finite number of solutions. If you have a configuration of n polygons, then there will definitely be k > n such that any configuration of k polygons will have greater side length (since the smallest such configuration, {3,k} has edge that grows without limit). And the sequence {m,n} grows with a limit given by {∞,n}, and for some m it will surpass the edge of the original configuration, putting upper limit on size of polygons that can appear there.


No, some polygons could be larger than m while others are smaller than m.

Take 3.5.5.5, for example; {5,4} surpasses this, but there can be 4 polygons with some larger than pentagons: 3.3.5.∞ .

Or take 4.4.4.4.4.4.4 and 3.4.4.4.4.4.7 .


Ah, true.
Marek14
Pentonian
 
Posts: 1191
Joined: Sat Jul 16, 2005 6:40 pm

Re: Almost-uniform tilings?

Postby Marek14 » Sun Feb 28, 2021 11:23 pm

Here's updated results file. Main change is the addition of apeirogons, also things are ordered by the edge lengths now. You can try the enumeration algorithm on these :)
Attachments
all results 2021-02-27.txt
(6.91 KiB) Downloaded 493 times
Marek14
Pentonian
 
Posts: 1191
Joined: Sat Jul 16, 2005 6:40 pm

Re: Almost-uniform tilings?

Postby mr_e_man » Tue Mar 02, 2021 6:14 pm

I tried it on a few of the vertices in your list, and it confirmed that your results are complete in those cases. But it's tedious to do manually, and I don't trust a computer to do it correctly without higher precision or interval arithmetic. (I have a high-precision calculator, but it's not programmable.)

Your findings of 10.10.∞ and ∞.∞.∞ are slightly surprising. I didn't find them because they can't be combined with the others in a tiling anyway; if we start with 10.10.∞, the three surrounding vertices must have the form 10.10.(...) or 10.∞.(...), which excludes 3.3.∞.∞ from even being considered.
ΓΔΘΛΞΠΣΦΨΩ αβγδεζηθϑικλμνξοπρϱσςτυϕφχψωϖ °±∓½⅓⅔¼¾×÷†‡• ⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎
ℕℤℚℝℂ∂¬∀∃∅∆∇∈∉∋∌∏∑ ∗∘∙√∛∜∝∞∧∨∩∪∫≅≈≟≠≡≤≥⊂⊃⊆⊇ ⊕⊖⊗⊘⊙⌈⌉⌊⌋⌜⌝⌞⌟〈〉⟨⟩
mr_e_man
Tetronian
 
Posts: 538
Joined: Tue Sep 18, 2018 4:10 am

Re: Almost-uniform tilings?

Postby Marek14 » Tue Mar 02, 2021 9:40 pm

mr_e_man wrote:I tried it on a few of the vertices in your list, and it confirmed that your results are complete in those cases. But it's tedious to do manually, and I don't trust a computer to do it correctly without higher precision or interval arithmetic. (I have a high-precision calculator, but it's not programmable.)

Your findings of 10.10.∞ and ∞.∞.∞ are slightly surprising. I didn't find them because they can't be combined with the others in a tiling anyway; if we start with 10.10.∞, the three surrounding vertices must have the form 10.10.(...) or 10.∞.(...), which excludes 3.3.∞.∞ from even being considered.


A user on Discords does symbolic checks, which helps. But new solutions are harder and harder to find.

I wonder, are there hard limits? For now, the largest polygon in a solution is 40-gon (not counting apeirogons and infinite families), and maximum number of distinct polygons at a vertex is 4, I think. Are those limits, or can they be extended? Is there a finite number of solutions, if we consider the infinite families as one solution?

I'm thinking about extending the tilings search algorithm to work with 2:1 edges for vertex-based solutions. Searches on bizarrely-shaped vertices are easier than those on regular and highly symmetrical polygons.

Today's new solution: {12,6} and its relatives have twice the edge of (3,6,24,24), though the latter cannot be assembled into straight angle, so there are probably no new tilings there.

Here's a question: In the (3,5,6,18)/(3,6,6,9), is it possible to have a hybrid tiling? None were found so far.
Marek14
Pentonian
 
Posts: 1191
Joined: Sat Jul 16, 2005 6:40 pm

Re: Almost-uniform tilings?

Postby Marek14 » Sun Oct 03, 2021 8:12 am

The hybrid (3,5,6,18)/(3,6,6,9) tilings still escape me.
I managed to find some constraints for them -- it seems that the number of vertex types involving pentagons and 18-gons must be divisible by 5, otherwise you cannot assemble any pentagons, and they must also include vertices with all three permutations, (3,5,6,18), (3,5,18,6), and (3,6,5,18). But beyond that, I'm currently looking through possibilities involving 9 types of vertices, and still no luck.
Marek14
Pentonian
 
Posts: 1191
Joined: Sat Jul 16, 2005 6:40 pm

Re: Almost-uniform tilings?

Postby Marek14 » Thu Apr 28, 2022 9:38 pm

Update: HyperRogue now supports apeirogons, so the equivalence between (3,5,5,5) and (3,3,5,oo) can now be shown explicitly:
3555 3.png
(990.74 KiB) Not downloaded yet


Apart from this -- haven't updated this thread for a long time -- I have found the solution to (3,5,6,18)/(3,6,6,9) conundrum about a week after my last post. It required complete reworking of the search algorithm as the parameters are insane -- the smallest solutions are 16-uniform. Then I got sucked into the problem of enumeration of k-uniform Euclidean tilings; the new algorithm turned out to be very successful at that.
Marek14
Pentonian
 
Posts: 1191
Joined: Sat Jul 16, 2005 6:40 pm

Re: Almost-uniform tilings?

Postby mr_e_man » Thu Mar 07, 2024 12:07 am

I was hoping my new interval arithmetic calculator would be useful here, for finding edge length matches.

But interval arithmetic can't prove that two computed numbers are equal; it can only prove that two computed numbers are unequal. The algorithm described above would get stuck at the equality test θ(∞,x) = α. It might be actually slightly greater than α, but we don't know how much greater, so m may be arbitrarily large.

Indeed, though there are finitely many vertex configurations with an exact edge length, there may be infinitely many vertex configurations with edge lengths in a small interval. The most obvious example is ∞.∞.∞; any open interval containing its edge length also contains the edge lengths of n.n.n for infinitely many values of n.

Of course, we could assume θ(∞,x) = α if we can't prove otherwise, and proceed with the algorithm, and take the results as tentative. All the algebra required to determine exact equality could be done later (probably with the help of a CAS). If it turns out that they're not equal, then the incorrect vertex configuration tells us exactly where to step into the algorithm again (using higher precision).
ΓΔΘΛΞΠΣΦΨΩ αβγδεζηθϑικλμνξοπρϱσςτυϕφχψωϖ °±∓½⅓⅔¼¾×÷†‡• ⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎
ℕℤℚℝℂ∂¬∀∃∅∆∇∈∉∋∌∏∑ ∗∘∙√∛∜∝∞∧∨∩∪∫≅≈≟≠≡≤≥⊂⊃⊆⊇ ⊕⊖⊗⊘⊙⌈⌉⌊⌋⌜⌝⌞⌟〈〉⟨⟩
mr_e_man
Tetronian
 
Posts: 538
Joined: Tue Sep 18, 2018 4:10 am

Re: Almost-uniform tilings?

Postby Marek14 » Fri Mar 15, 2024 5:50 am

At this point, I have a custom-made code that has greater scope: it can put together polygons defined by number of sides and edge multiplier. This led to many more identities, but on the flip side, not all of them are actually useful for tilings. As an example, imagine you have a triangle with side Ax, and three apeirogons with sides Bx, Cx, Dx. A,B,C,D are positive integers, i.e. side lengths of all four polygons are commensurate.

Then, if B=C-2A and D=C+2A, the angle of Ax triangle is exactly half of the angle of the Cx apeirogon.
Marek14
Pentonian
 
Posts: 1191
Joined: Sat Jul 16, 2005 6:40 pm

Previous

Return to Other Geometry

Who is online

Users browsing this forum: Google [Bot] and 3 guests