
Hyperbolic Cellular Automata Simulator - Schiphol
https://dmishin.github.io/hyperbolic-ca-simulator/index.html
======
kmm
Hyperbolic spaces are a bit freaky because of how huge they are. Living on a
flat plane (like we do for scales smaller than a few thousand kilometers),
area grows quadratically with the radius, i.e. if you venture out twice as
far, the area you cover gets four times bigger. Go 10 times further, and there
is 100 times more area to get lost in.

On a hyperbolic plane however, area grows exponentially when you stray further
than a few times the characteristic length of the space. Increasing your range
from one such length to two, the area covered grows by a factor of about 5.
Going from ten to twenty however, increases the area by about ~20000!

If the characteristic length were a kilometer, you would never be able to get
more than a few dozen kilometers away from your home before being
irretrievably lost. The area around you 10 kilometers away would have the area
of Manhattan. A circle with radius 20 kilometers would be slightly bigger than
Egypt. And everything within 50 kilometers would be spread out over an area
about the size of the Solar System. Unless you left a trail of breadcrumbs,
you'd never be able to retrace your steps.

~~~
harmoat
Does the area grow less than quadratically with the radius on the surface of a
shpere?

~~~
kmm
To be precise, it's explicitly 2pi R^2 ( 1 - cos(r / R) ) , where r is the
radius of the circle on the sphere, and R is the radius of the sphere itself.

If r is small compared to R, cos(r / R) = 1 - (r/R)^2 / 2 + O((r/R)^4) so we
recover the usual flat circle formula for the area pi r^2 , which is quadratic
in r. Only if the r gets comparable to R does the curve flatten.

So a circular area with radius 1000 km would only be 0.2% smaller on Earth
than its flat equivalent. Not a useful way to prove the Earth is round.

[https://www.wolframalpha.com/input/?i=plot+pi*x%5E2%2C+2*pi%...](https://www.wolframalpha.com/input/?i=plot+pi*x%5E2%2C+2*pi%281+-+cos%28x%29%29+from+0+to+pi)

------
stared
There is a game HyperRogue
[https://www.roguetemple.com/z/hyper/](https://www.roguetemple.com/z/hyper/)
(one of my favorite, vide [https://medium.com/quantum-photons/to-make-a-cool-
game-you-f...](https://medium.com/quantum-photons/to-make-a-cool-game-you-
first-have-to-play-other-cool-games-a1a1d45e169b)).

One of its zones, living cave, as a cellular automaton in hyperbolic space.
Its walls live.

~~~
tempguy9999
Your 2nd link mentioned velocity raptor, which I've just watched on
[https://www.youtube.com/watch?v=Q6yWXppfsAo](https://www.youtube.com/watch?v=Q6yWXppfsAo)

Interesting.... Not that relativity makes a whit of sense anyway, but that's
an intriguing video (edit: wouldn't want to play it though)

------
kleer001
Excellent!

I fear it's quite rare anymore that I see something very new to me. Sure, I
read about a hyperbolic world in Greg Egan's Dichronauts, but it's not quite
the same as seeing it.

[https://www.gregegan.net/DICHRONAUTS/01/WorldExtra.html](https://www.gregegan.net/DICHRONAUTS/01/WorldExtra.html)

------
pavel_lishin
Only problem seems to be that it only keeps track of cells that are currently
visible; pan around until the living cells are no longer visible, then pan
back - and you come back to a desert.

~~~
SamReidHughes
It works fine for me.

------
rmbryan
Here's a fun world, N=8, M=4 and 'next': function(x, s){ if (x===1 && (s===2
|| s===3)) return 1; if (x===0 && (s===3)) return 1; return 0

[https://dmishin.github.io/hyperbolic-ca-
simulator/index.html...](https://dmishin.github.io/hyperbolic-ca-
simulator/index.html?grid=8,4&cells=8$4$\(A4\(B\(a2\(B|1\(A2\(B|1\)\)\)\)\(a3\(B\(a\(B|1\(A2\(B|1\)\)\)\)\(a2\(B|1\)\)\(a3\(B|1\)\)\)\)\(a\(B|1\(A2\(B|1\)\)\)\)\)\(B2\(a\(B|1\(A3\(B|1\)\)\(A2\(B2|1\)\(B|1\)\)\)\)\(a3\(B|1\)\)\(a2\(B\(A4\(B2|1\)\(B|1\)\)\(A3\(B|1\)\)\(A2\(B2|1\)\(B\(a\(B|1\)\)\(a2\(B|1\(A2\(B|1\)\)\)\)\(a3\(B|1\)\)\)\)\(a2\(B|1\(A2\(B|1\)\)\)\)\(a3\(B|1\)\)\)\)\(A4\(B|1\(a\(B|1\(A2\(B|1\)\)\)\)\(a2\(B|1\)\)\)\(B2\(A4\(B2|1\)\(B|1\)\)\(a\(B|1\(A2\(B|1\)\)\)\)\(a2\(B|1\(A2\(B|1\)\)\)\)\(a3\(B|1\)\)\)\)\(A3\(B|1\)\)\(A2\(B|1\)\)\)\(b\(A3\(B\(a2\(B|1\(A2\(B|1\)\)\)\)\(a\(B|1\)\)\(a3\(B|1\)\)\)\(B2\(a\(B|1\(A2\(B|1\)\)\)\)\(A4\(B|1\)\)\(A3\(B2|1\)\(B|1\)\)\(A2\(B|1\)\)\(a2\(B|1\)\)\)\)\(A2\(b\(A3\(B2|1\)\(B|1\)\)\)\(B\(a2\(B|1\(A2\(B|1\)\)\)\)\(a3\(B|1\)\)\)\)\(A\(b\(A3\(B2|1\)\(B|1\)\)\)\)\)\)\(A\(b\(A3\(B2\(a2\(B|1\(A2\(B|1\)\)\)\)\(a3\(B|1\)\)\(a\(B|1\)\)\)\(b\(A3\(B|1\)\)\(A2\(B2|1\)\(B|1\)\)\)\)\(A2\(B\(a\(B|1\)\)\(a2\(B|1\(A2\(B|1\)\)\)\)\(a3\(B|1\)\)\)\(B2\(A3\(B|1\)\)\(A2\(B2|1\)\(B|1\)\)\)\)\)\(B\(a\(B\(a2\(B\(a\(B|1\(A2\(B|1\)\)\)\)\(a2\(B|1\)\)\(a3\(B|1\)\)\(A2\(B2|1\(A2\(B|1\)\)\)\(B\(a\(B|1\)\)\)\)\(A4\(B2|1\)\(B|1\)\)\(A3\(B|1\)\)\)\)\(A2\(B|1\(a\(B|1\(A\(b\(A2\(B|1\)\)\)\)\(A2\(B|1\)\)\)\)\(a2\(B\(a\(B|1\(A2\(B|1\)\)\)\)\(a2\(B|1\)\)\)\)\)\(B2|1\(A2\(B2|1\(A2\(B|1\)\)\)\(B\(a\(B|1\)\)\(a2\(B|1\)\)\(a3\(B|1\)\)\)\)\(A\(b\(A3\(B2|1\)\(B|1\)\)\)\)\)\)\(a3\(B\(a\(B|1\(A2\(B|1\)\)\)\)\(a2\(B|1\(A2\(B|1\)\)\)\)\(a3\(B|1\)\)\)\)\(A4\(B|1\(a\(B|1\(A2\(B|1\)\)\)\)\(a2\(B|1\)\)\)\)\(A3\(B|1\)\)\(a\(B|1\(A2\(B|1\)\)\)\)\)\)\(a2\(B\(a2\(B|1\(A2\(B|1\)\)\)\)\(A2\(B\(a\(B|1\(A2\(B|1\)\)\)\)\(a2\(B|1\(A2\(B|1\)\)\)\)\(a3\(B|1\)\)\)\(B2|1\(A2\(B|1\)\)\)\)\(A4\(B|1\)\)\(A3\(B2|1\)\(B|1\)\)\(A\(b\(A3\(B2|1\)\(B|1\)\)\(A2\(B2|1\)\(B|1\)\)\)\)\(a3\(B|1\)\)\)\)\(a3\(B\(a\(B|1\)\)\(a2\(B|1\)\)\)\)\)\(B2\(a2\(B|1\(A2\(B\(a2\(B|1\)\)\(a\(B|1\(A2\(B|1\)\)\)\)\)\(B2|1\(A2\(B|1\)\)\)\)\(A3\(B|1\)\)\)\)\(A2\(B\(a\(B|1\(A2\(B\(a\(B|1\(A2\(B|1\)\)\)\)\(a2\(B|1\)\)\(a3\(B|1\)\)\)\)\(A\(b\(A3\(B|1\)\)\(A2\(B2|1\)\(B|1\)\)\)\)\)\)\(a2\(B|1\(A2\(B\(a\(B|1\(A2\(B|1\)\)\)\)\(a2\(B|1\(A2\(B|1\)\)\)\)\(a3\(B|1\)\)\)\(B2|1\)\)\)\)\(a3\(B\(a3\(B|1\)\)\)\)\)\(b\(A3\(B2|1\)\(B|1\)\)\(A2\(B2|1\)\(B|1\)\)\)\(B2|1\(A3\(B|1\)\)\(A2\(B2|1\(A2\(B|1\)\)\)\(B\(a\(B|1\)\)\)\)\)\)\(a\(B\(A2\(B\(a\(B|1\(A2\(B|1\)\)\)\)\(a2\(B|1\)\)\)\(B2|1\(A2\(B|1\)\)\)\)\(A4\(B|1\)\)\(A3\(B2|1\)\(B|1\)\)\)\)\(A4\(B2|1\)\(B|1\)\)\(A3\(B2\(A4\(B|1\)\)\(A3\(B|1\)\)\(A2\(B2|1\)\(B|1\)\)\(a\(B|1\(A2\(B|1\)\)\)\)\(a2\(B|1\(A2\(B|1\)\)\)\)\(a3\(B|1\)\)\)\(B\(a\(B|1\(A2\(B|1\)\)\)\)\(a2\(B|1\(A2\(B|1\)\)\)\)\(a3\(B|1\)\)\)\)\(A\(b\(A3\(B\(a2\(B|1\(A2\(B|1\)\)\)\)\(a3\(B|1\)\)\)\(B2|1\(a\(B|1\)\)\)\(b\(A3\(B2|1\)\(B|1\)\)\(A2\(B2|1\)\(B|1\)\)\)\)\(A2\(B2|1\(a2\(B|1\(A2\(B|1\)\)\)\)\(a3\(B|1\)\)\)\(B|1\)\)\)\)\(a3\(B|1\)\)\)\)\(A3\(B2\(A3\(B|1\)\)\(A4\(B2\(a2\(B|1\(A2\(B|1\)\)\)\)\(A4\(B|1\)\)\(A3\(B2|1\)\(B|1\)\)\(A2\(B2|1\)\(B|1\)\)\(a\(B|1\(A2\(B|1\)\)\)\)\(a3\(B|1\)\)\)\(B\(a\(B|1\(A2\(B|1\)\)\)\)\(a2\(B|1\)\)\)\)\(A2\(B2\(a\(B|1\)\)\(a2\(B|1\(A2\(B|1\)\)\)\)\(a3\(B|1\)\)\)\(b\(A3\(B|1\)\)\(A2\(B2|1\)\(B|1\)\)\)\)\)\(B\(a\(B|1\(A3\(B|1\)\)\(A2\(B2|1\)\(B|1\)\)\)\)\(a2\(B|1\(A2\(B2|1\(A2\(B|1\)\)\)\(B\(a\(B|1\)\)\)\)\(A\(b\(A2\(B|1\)\)\)\)\)\)\(a3\(B|1\(a\(B|1\)\)\)\)\)\(b\(A3\(b\(A3\(B2|1\)\(B|1\)\)\(A2\(B|1\)\)\)\(B\(a2\(B|1\(A2\(B|1\)\)\)\)\(a\(B|1\)\)\(a3\(B|1\)\)\)\(B2\(A4\(B|1\)\)\(a\(B|1\(A2\(B|1\)\)\)\)\(A3\(B|1\)\)\(A2\(B2|1\)\(B|1\)\)\(a2\(B|1\(A2\(B|1\)\)\)\)\(a3\(B|1\)\)\)\)\(A2\(B2\(a\(B|1\(A2\(B|1\)\)\)\)\(a2\(B|1\(A2\(B|1\)\)\)\)\(a3\(B|1\)\)\)\)\)\)\(b\(A3\(B2|1\(A3\(B|1\)\)\(A2\(B2|1\)\(B|1\)\)\)\(B\(a3\(B|1\)\)\)\(b\(A3\(B|1\)\(b|1\)\)\(A2\(B2|1\)\(B|1\)\)\)\)\(A2\(B2\(A4\(B2|1\)\(B|1\)\)\(a3\(B|1\)\)\)\(B|1\)\(b\(A3\(B2|1\)\(B|1\)\)\(A2\(B2|1\)\(B|1\)\)\)\)\)\(A2\(B2\(A2\(b\(A2\(B|1\)\)\)\(B2|1\(a\(B|1\)\)\)\(B|1\)\)\(A4\(B\(a\(B|1\)\)\(a2\(B|1\(A2\(B|1\)\)\)\)\(a3\(B|1\)\)\)\(B2|1\)\)\(a2\(B|1\(A2\(B\(a\(B|1\(A2\(B|1\)\)\)\)\(a2\(B|1\(A2\(B|1\)\)\)\)\(a3\(B|1\)\)\)\(B2|1\(A2\(B|1\)\)\)\)\(A\(b\(A3\(B2|1\)\(B|1\)\)\)\)\)\)\(A3\(B|1\)\(b\(A3\(B2|1\)\(B|1\)\)\)\)\(a3\(B|1\)\)\)\(B|1\(a\(B|1\(A2\(B2|1\(A2\(B|1\)\)\)\(B\(a\(B|1\)\)\(a2\(B|1\(A2\(B|1\)\)\)\)\(a3\(B|1\)\)\)\)\(A\(b\(A3\(B|1\)\)\(A2\(B|1\)\)\)\)\)\)\(a2\(B|1\(a\(B|1\)\)\)\)\)\(b\(A3\(B2\(A4\(B2|1\)\(B|1\)\)\(a2\(B|1\(A2\(B|1\)\)\)\)\(a3\(B|1\)\)\)\(B|1\)\)\(A2\(B2|1\(A2\(B|1\)\)\)\(B|1\(a\(B|1\)\)\)\)\)\)\(B|1\(A\(b\(A3\(b\(A2\(B2|1\)\(B|1\)\)\(A3\(B2|1\)\(B|1\)\)\)\(B2|1\)\(B|1\)\)\(A2\(B\(a2\(B|1\(A2\(B|1\)\)\)\)\(a3\(B|1\)\)\)\(B2\(a\(B|1\(A2\(B|1\)\)\)\)\(a2\(B|1\(A2\(B|1\)\)\)\)\(a3\(B|1\)\)\)\)\)\)\(a\(B\(a\(B|1\(A2\(B|1\)\)\)\)\(a2\(B|1\)\)\)\)\(A4\(B2\(A4\(B2|1\)\(B|1\)\)\(A3\(B2|1\)\(B|1\)\)\(a3\(B|1\)\)\)\)\(A2\(b\(A3\(B2|1\)\(B|1\)\)\)\(B2\(A4\(B|1\)\)\(A3\(B2|1\)\(B|1\)\)\(A2\(B2|1\(A2\(B|1\)\)\)\(B\(a\(B|1\(A2\(B|1\)\)\)\)\(a2\(B|1\)\)\)\)\)\(B\(a\(B|1\(A4\(B|1\)\)\(A3\(B2|1\)\(B|1\)\)\)\)\(a3\(B\(a3\(B|1\)\)\)\)\)\)\(A3\(B|1\(a3\(B|1\)\)\)\)\(a2\(B\(A4\(B2|1\)\(B|1\)\)\(A3\(B2|1\)\(B|1\)\)\(a3\(B|1\)\)\)\)\)\(B2|1\(a3\(B\(a2\(B|1\(A2\(B|1\)\)\)\)\(a3\(B|1\)\)\(a\(B|1\)\)\)\)\(a\(B|1\(A2\(B2|1\(A2\(B|1\)\)\)\(B\(a\(B|1\(A2\(B|1\)\)\)\)\(a2\(B|1\)\)\)\)\(A\(b\(A3\(B|1\)\)\(A2\(B2|1\)\(B|1\)\)\)\)\)\)\(a2\(B\(A\(b\(A3\(B|1\)\)\(A2\(B2|1\)\(B|1\)\)\)\)\(a\(B|1\(A2\(B|1\)\)\)\)\(a2\(B|1\(A2\(B|1\)\)\)\)\(a3\(B|1\)\)\)\)\(A3\(B|1\)\)\(A2\(B|1\)\(b\(A2\(B|1\)\)\)\(B2\(a\(B|1\(A2\(B|1\)\)\)\)\(a2\(B|1\)\)\)\)\)\(a3\(B|1\(a3\(B\(a\(B|1\(A2\(B|1\)\)\)\)\(a2\(B|1\)\)\)\)\(a\(B|1\(A2\(B|1\)\)\(a\(B|1\)\)\(A\(b\(A2\(B|1\)\)\)\)\)\)\(a2\(B\(A2\(B|1\)\)\(a\(B|1\(A2\(B|1\)\)\)\)\(a2\(B|1\(A2\(B|1\)\)\)\)\(a3\(B|1\)\)\(A\(b\(A3\(B|1\)\)\(A2\(B2|1\)\(B|1\)\)\)\)\)\)\)\)\(a2\(B|1\(a\(B\(a2\(B|1\(A2\(B|1\)\)\)\)\(a3\(B|1\)\)\(a\(B|1\(A2\(B|1\)\)\)\)\(A4\(B2|1\)\(B|1\)\)\)\)\(A2\(B\(a\(B\(A2\(B|1\)\)\(A\(b\(A3\(B|1\)\)\(A2\(B2|1\)\(B|1\)\)\)\)\)\)\(a2\(B|1\(a\(B|1\)\)\)\)\(a3\(B|1\)\)\)\)\(A\(b\(A2\(B2\(a\(B|1\(A2\(B|1\)\)\)\)\(A4\(B|1\)\)\(A3\(B2|1\)\(B|1\)\)\(a2\(B|1\)\)\)\)\(A3\(B|1\(a\(B|1\)\)\)\(B2\(A3\(B|1\)\)\(A2\(B2|1\)\(B|1\)\)\)\)\(A\(b\(A3\(B|1\)\)\(A2\(B2|1\)\(B|1\)\)\)\)\)\)\(A4\(B2|1\(a2\(B|1\(A2\(B|1\)\)\)\)\(a3\(B|1\)\)\)\(B\(a\(B|1\(A2\(B|1\)\)\)\)\(a2\(B|1\)\)\(a3\(B|1\)\)\)\)\(A3\(b\(A3\(B2|1\)\(B|1\)\)\(A2\(B2|1\)\(B|1\)\)\)\(B|1\(a\(B|1\(A2\(B|1\)\)\)\)\(a2\(B|1\)\)\)\(B2\(A4\(B|1\)\)\(A3\(B2|1\)\(B|1\)\)\(A2\(B|1\)\)\)\)\)\)\(a\(B\(A2\(B\(a3\(B\(a\(B|1\(A2\(B|1\)\)\)\)\(a2\(B|1\)\)\)\)\(a2\(B|1\(A\(b\(A3\(B|1\)\)\(A2\(B2|1\)\(B|1\)\)\)\)\)\)\(a\(B|1\(A2\(B|1\)\)\)\)\)\(B2|1\(A2\(B\(a2\(B|1\(A2\(B|1\)\)\)\)\(a\(B|1\(A2\(B|1\)\)\)\)\(a3\(B|1\)\)\)\(B2|1\)\)\(A3\(B|1\)\)\)\(b\(A3\(B2|1\)\(B|1\)\)\)\)\(A4\(b\(A3\(B|1\)\)\(A2\(B2|1\)\(B|1\)\)\)\(B2\(A4\(B|1\)\)\(A3\(B2|1\)\(B|1\)\)\(A2\(B|1\)\)\)\(B\(a\(B|1\)\)\(a2\(B|1\)\)\(a3\(B|1\)\)\)\)\(A3\(b\(A3\(B2|1\)\(B|1\)\)\(A2\(B2|1\)\(B|1\)\)\)\(B2\(A4\(B|1\)\)\(A3\(B2|1\)\(B|1\)\)\(A2\(B2|1\)\(B|1\)\)\)\(B\(a3\(B|1\)\)\)\)\(a\(B|1\(A3\(B|1\)\)\(A2\(B2|1\)\(B|1\)\)\)\)\(A\(b\(A2\(B|1\(a\(B|1\)\)\)\(B2\(A4\(B|1\)\)\(A3\(B2|1\)\(B|1\)\)\(A2\(B2|1\)\(B|1\)\)\)\)\)\)\(a2\(B|1\)\)\(a3\(B|1\)\)\)\)&generation=39&viewbase=A^3B^2A^4B^2&viewoffset=-1.554839128280905:1.2084229267231281:0.06686933160503995)

------
slowenough
When you drag the hyperbolic plane it moves and redraws. How is this
translation of the cells calculation done?

This is very cool.

~~~
jnieminen
The neighborhood rules are described in the help section.

~~~
slowenough
No I don't mean the automata rules, I mean the calculation describing how the
cells move when you drag them around.

~~~
roywiggins
It depends on what model they're using. If they're just using the Poincare
disk (as is displayed) then translations/rotations/reflections- isometries- of
the hyperbolic plane are modeled by the Mobius transformations that map the
unit circle (the edge) to itself. Geometrically speaking, Mobius
transformations in the plane are 1) ordinary reflection, translation, and
scaling, and 2) circle inversions, and form a group. Translations of the
poincare disk are compositions of two circle inversions that end up mapping
the center of the circle to some other point inside the disk, and map the disk
to itself.

[https://mathoverflow.net/questions/313671/classification-
of-...](https://mathoverflow.net/questions/313671/classification-
of-m%C3%B6bius-transformations-over-the-poincar%C3%A9-disk)

This doesn't really get into transformations, but here's one explication of a
hyperbolic tiling I wrote:

[http://roy.red/folding-tilings-.html](http://roy.red/folding-tilings-.html)

