4 ms·
Hyperbolic Cellular Automata Simulator
- slowenough 7y agoWhen you drag the hyperbolic plane it moves and redraws. How is this translation of the cells calculation done? This is very cool.
- jnieminen 7y agoThe neighborhood rules are described in the help section.
- slowenough 7y agoNo I don't mean the automata rules, I mean the calculation describing how the cells move when you drag them around.
- seiferteric 7y agoI can't say for sure, but I think it is using a conformal mapping.
- pharrington 7y agoProjection of the cells to the hyperbolic disk is in https://github.com/dmishin/hyperbolic-ca-simulator/blob/master/src/core/poincare_view.coffee https://github.com/dmishin/hyperbolic-ca-simulator/blob/mast...
- roywiggins 7y agoIt 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-m%C3%B6bius-transformations-over-the-poincar%C3%A9-disk https://mathoverflow.net/questions/313671/classification-of-... 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
- rmbryan 7y agoHere'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?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 https://dmishin.github.io/hyperbolic-ca-simulator/index.html...
- stared 7y agoThere 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-first-have-to-play-other-cool-games-a1a1d45e169b https://medium.com/quantum-photons/to-make-a-cool-game-you-f...). One of its zones, living cave, as a cellular automaton in hyperbolic space. Its walls live.
- tempguy9999 7y agoYour 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)
- kmm 7y agoHyperbolic 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.
- bilekas 7y agoMadness... Now lets calculate the quantity of breadcrumbs required!
- danharaj 7y agoIt would perhaps be a relief from the viciousness of close quarters living if we lived on a hyperbolic surface rather than a puny sphere. Make a day's hike away from brutal conflict, take a detour, and never be accosted again.
- gabcoh 7y agoThis sounds like an interesting premise for a sci-fi story. Does anyone know of any books with this premise of living on a hyperbolic plane?
- harmoat 7y agoDoes the area grow less than quadratically with the radius on the surface of a shpere?
- pavel_lishin 7y agoOnly 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 7y agoIt works fine for me.
- kleer001 7y agoExcellent! 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