working on another fractal animation, this time a julia morph orbiting in the hairs of an island. no clue yet if it will turn out any good...

current progress:
- found the angled internal address for one exemplar by tracing a ray outwards in mandelbrot-perturbator-gtk
- found a pattern for the external angles of the prefix, by tracing a few more rays outwards (much shallower) and comparing the binary strings
- wrote some haskell to combine the prefixes with the suffix of the examplar address, and compute one of the corresponding external angle pairs
- now tracing the rays to end-points in parallel:

```
cat rays.txt | parallel -k m-exray-in 100 "{}" 8 \$((2 * 8 * 1378)) | tee -a endpoints.txt
```

- a total of 256 rays on 16 threads, ETA about 1h30 wall-clock (plus the 20mins done already)

...and results are in: it doesn't work as an animation at all, frames are seemingly unconnected. I guess pasting a different prefix onto an angled internal address does not do anything useful structurally, even though it happened to give valid addresses in this instance.

The first 3 prefixes were 1 1/2 2 1/2 3 followed by:

- 1/10 28
- 1/8 24 1/2 28
- 1/7 21 1/2 28

where the first is what I designed, and the other 2 are extrapolated. I think the change of /10 to /8 and /7 messed up the structural assumptions of the suffix, which was

1/2 56 1/2 57 1/2 58 1/3 144 1/2 145 1/2 146 1/3 320 ... 1378

In particular the influencing island had period 3 and the influencing angle was n/10, so 3*10=30 aligned nicely with the repeated structure of p->2p+30 in the angled internal addresses; while the non-n/10 addresses are forced/unrelated so don't look as good...

The structure of the first frame was created by going one step along into one of the neighbouring double spirals; if the angle is n/10 this affects the period by p->2p+30. If the angle is say n/8, I suspect the period would change by p->2p+24; for angle n/7 by p->2p+21, etc. So maybe I can rescue this animation concept after all:

0. calculate external angle of prefix as .({011,100}^8 0111) (256 locations)
1. calculate angled internal address of prefix from external angle of prefix
2. extract the angle at 1 1/2 2 1/2 3 n/q
3. build the suffix by repetitions of (p-2) 1/2 (p-1) 1/2 p 1/3 2p+3q-2 1/2 2p+3q-1 1/2 2p+3q 1/3 ...

Not sure if this will be sufficient, as some of the hairs come off grandchild bulbs with more than one non-1/2 angle..

It wasn't the grandchild-bulbs causing issues, it was naivety that the address patterns would be so simple. Suppose the address starts:

1 2 3 p/q ... 28 ...

If 3q > 28, then the first ... is empty, but if 3q < 28 then 3q appears in the address. When 3q is not in the address (the case I started with, turns out to be rare) then the address pattern is as described above.

When 3q is in the address it's much simpler: after the 28 comes 1/2 28+3q, then after that the pattern is ... p 1/3 2p+3q 1/3 ...

I think. I need to actually render all the corresponding images to check that it is correct...

Haskell code corresponding to description above:

```
main = writeFile "rays.txt" . unlines . map (\prefix ->
let Just addressPrefix@(Sym.Angled 1 _ (Sym.Angled 2 _ (Sym.Angled 3 pq _))) = (Sym.angledAddress . Sym.rational) =<< Txt.parse prefix
addressSuffix (Sym.Unangled p) = Sym.Angled p (1 Sym.% 2) (go 4 p0)
where
p0 | m < 28 = 28 + m
| m > 28 = 2 * p
go 0 p | m < 28 = Sym.Unangled p
go n p | m < 28 = Sym.Angled p (1 Sym.% 3) (go (n - 1) (2 * p + m))
go 0 p | m > 28 = Sym.Angled p (1 Sym.% 2) (Sym.Angled (p + 1) (1 Sym.% 2) (Sym.Unangled (p + 2)))
go n p | m > 28 = Sym.Angled p (1 Sym.% 2) (Sym.Angled (p + 1) (1 Sym.% 2) (Sym.Angled (p + 2) (1 Sym.% 3) (go (n - 1) (2 * (p + 2) + m - 2))))
m = 3 * fromIntegral (Sym.denominator pq)