I’m not sure if this is a trip report, or a cry for help, but I had a go at making the spectre pattern from whole cloth, to see how it went. I had some successes, but uncovered more mysteries.
Here was my result:
Spectre6.1.gh (32.9 KB)
The algorithm is the elementary approach of positioning each of the subunits explicitly to form one generation, and then using the result for the next generation. The grasshopper file also allows for contouring the edge of the tiles to some arbitrary curve.
The Hat pattern was easier, because the pattern is based on a simple triangular grid. In the case of the spectre, it turns out that all the vertex coordinates can be expressed as
x or y = (n + r * sqrt (3)) / 2
where n and r are integers. This follows by induction: starting from the origin, all possible moves are either by a distance of 1 along one of the axes, or by a distance of 0.5 along one axis and sqrt(3)/2 along the other. Following a ‘turtle graphics’ path from the origin to any point is then a sum of all these transitions. Rotating a component about a vertex does not change the argument.
Dealing with integers, rather than irrational numbers, gives a much simpler handling of positioning, and is rather like using complex numbers and the complex plane.
Each generation of the expansion results in a component that is rotated and mirrored relative to the previous generation.
Each generation consists of eight uses of the previous generation.
- One component is the previous generation, unchanged, at the origin
- One component is the previous generation with one of its eighths removed
- One component becomes the one to be omitted in the next generation
- One component is adjacent to the first component, and the two form the ‘mystic’ pattern, which is bilaterally symmetrical and could be flipped over to form a variation in the pattern
- the other four are identical with the previous generation.
At each expansion, all the components need to be rotated, each differently, and the way this is done is different for alternate generations, i.e. there are only two ways to do it.
The complexity is in the positioning of the subcomponents to form each generation, and this is perhaps the basis of my question. In principle, there is a geometric expansion ratio at each generation, being some function of sqrt (15), but in practice this probably applies only after many generations; the first few generations have much more spotty positioning and there appears to be no simple way to get the coordinates used at one generation to be simply multiplied by some factor to give the coordinates for the next. Or perhaps to take the coordinates in the limit and divide them down.
Am I missing something here, or is positioning these subcomponents really tricky? Perhaps I am using the wrong origin, and a simple shift in origin would suddenly make all the positioning geometric? I use the bottom corner of the initial piece as the origin. Perhaps some other origin would simplify everything. Anyway, a fun exercise!