[HN Gopher] Show HN: Random Roads ___________________________________________________________________ Show HN: Random Roads Author : edwardc Score : 120 points Date : 2020-06-21 12:14 UTC (10 hours ago) (HTM) web link (random-roads--edwardcunningh2.repl.co) (TXT) w3m dump (random-roads--edwardcunningh2.repl.co) | Phithagoras wrote: | Would be cool to see a blog post explaining the simulation! | cardmagic wrote: | If you like this aesthetic and want to play a game that looks | like this and is super fun, try Railroad Ink: | https://ondras.github.io/rri/ | kevsim wrote: | Seems to use the same approach used to design the road system in | Boston :) | A4ET8a8uTh0 wrote: | Oddly mesmerising. What did you use to do it? | edwardc wrote: | Thanks. It's plain JavaScript, rendering with an HTML canvas. | | I did investigate JS 2D graphics libraries but decided in the | end that this was sufficiently simple to not warrant one. It | was harder than I expected to get the drag & zoom to work! | ArchieMaclean wrote: | The code is at https://repl.it/@EdwardCunningh2/Random-Roads | dusted wrote: | Wonderful little thing :) I was instantly reminded of substrate, | but the way this ends, each "run" looks like a minimalistic | artwork. | | This would be great on A4 sized e-ink paper, mounted in a nice | frame and refreshing a few times a day. | sloreti wrote: | Generative Phoenix suburbs | winrid wrote: | Reminds me of the Wave Function Collapse algorithm, although | doesn't look to be that. | | https://github.com/mxgmn/WaveFunctionCollapse | | What algorithm is this using? Got a GitHub link? | shobith wrote: | It seems to be available in browser, see script.js it's not | minified. | kleer001 wrote: | I would love to see this combined with L-systems O_O | xwdv wrote: | Wouldn't call these roads really. | | Roads without context are just paths. You need the roads to | provide useful destinations as efficiently as possible. | | Many of these paths lead nowhere. In fact, all of them go | nowhere, I don't even think there's loops. | [deleted] | krthr wrote: | you must be the life of the parties | Cynddl wrote: | Thanks for sharing! Really like the minimal design and the | animations. Could you explain how you did this simulation? | edwardc wrote: | Thanks for the feedback - the minimal look is pleasing to my | eye too! | | I wrote a brief description in this comment: | https://news.ycombinator.com/item?id=23592538 | | Initially I had envisaged something a bit cleverer, but for an | art project keeping it simple seemed to do the trick. | abdulhaq wrote: | Some people see this and say 'how did you do it?'. Others say to | themselves, 'how would I do it?'. I'm in the second category... | jackdh wrote: | Alot of other people probably say 'Why did you do it?' | justinpombrio wrote: | This reminds me of the beautiful "substrate" screen saver: | http://www.complexification.net/gallery/machines/substrate/ | cdaringe wrote: | Brilliant. Anyone know of an impl ready to roll for macos? | kqr wrote: | That is absolutely stunning. My favourite part of flying! | cpeterso wrote: | You might like Gregory Dicum's book "Window Seat: Reading the | Landscape from the Air". https://io9.gizmodo.com/how-to-read- | the-landscape-from-your-... | carapace wrote: | Ach! this reminds me of an artist who worked mostly with | Processing ( https://processing.org ) and either did this or | something very like it (and a bunch of other stuff.) | MattRix wrote: | Uh are you sure you're not thinking of Jared Tarbell, who | made this very piece in Processing? | carapace wrote: | Oh right! Derp. | californical wrote: | I just got it -- thanks for sharing this! Could watch it for | hours... | | If anyone else wants to download the screensaver, you can get | it for linux/osx/ios/android: https://www.jwz.org/xscreensaver/ | . Most in the collection aren't great (unless you're in an | early-2000s aesthetic mood), but I just installed the substrate | one :) | kinduff wrote: | Looks like the author is redirecting the link lol | teddyh wrote: | As seen in XScreenSaver: | https://www.youtube.com/watch?v=dCCVgBOVD0E | Kiro wrote: | I feel I'm missing something when people ask what algorithm this | is using. I'm imagining it as a bunch of Math.random and If | statements. In fact, I don't think I've ever googled for a | specific algorithm or implemented one. Am I doing programming | wrong? | djmips wrote: | Looked at the code. You were right! It was random and some | rules. Almost like an algorithm. | djmips wrote: | Have you seen this one!!! https://random-roads-- | edwardcunningh2.repl.co/#1592751582695 | kuroguro wrote: | Had a weird bug where the whole page was flickering while it was | drawing. A reload fixed it. On latest FF/Win. Not sure what the | cause was. | gb wrote: | Really nice. I tried something like this many years ago in Flash, | but the results this can produce are far more impressive! | cocktailpeanuts wrote: | great execution! | jk563 wrote: | Being able to see the random seed used in the console and use it | in the hash is a nice touch. I found a few large ones and one | with a single path between two points (1592751582695) | edwardc wrote: | Well spotted! | | I enjoy the large ones (eg. https://random-roads-- | edwardcunningh2.repl.co/#1589058113269) where I imagine the | gaps left in the middle to be parks. | blattimwind wrote: | There are some very small ones, too. | nostoc wrote: | Interesting. | | this one seems to show the boundaries of the display plane : | https://random-roads--edwardcunningh2.repl.co/#1592753917190 | edwardc wrote: | Good one! Yes, you've hit the bottom there. | | It is artificially limited to a 1001 x 1001 grid - just to stop | it from growing forever (which could get quite slow on lower | end devices). In practice I rarely encounter maps that go that | far. | cinntaile wrote: | It looks like an auto-generated PCB to me. Cool stuff. | dfxt8 wrote: | Hey, good work! What algorithm did you use? | KineticLensman wrote: | Not the author, but the algorithm is at | | https://random-roads--edwardcunningh2.repl.co/script.js | edwardc wrote: | Thanks! You can see the code here: | https://repl.it/@EdwardCunningh2/Random-Roads | | It's not especially clever: | | 1. I define a set of possible moves (eg. straight ahead, left | turn, junction, etc). One possible move is a dead-end, which | looks a bit like a house in my interpretation. | | 2. Each move is assigned a relative weight (eg. continuing | straight ahead 10x more likely than turning left). | | 3. Each iteration, for each of the roads under construction, a | random move is selected. Some moves are impossible (based on | other roads already drawn on the map) and so it will ensure not | to select one that would result in a collision. At worst, it | will terminate the road with a dead-end. | | 4. Repeat forever, until every road has terminated in a dead- | end. | | Most of the script itself is dealing with the rendering logic. | To avoid collisions I maintain a 2D array of all visited | points. | winrid wrote: | Nice! My first page load I got a single line that stopped at | the first point. Is that just able to happen? | edwardc wrote: | Yes, there's nothing to prevent very small maps like what | you saw - even ones that terminate with a dead-end before a | road has been drawn (eg. https://random-roads-- | edwardcunningh2.repl.co/#1592758760947). | | I considered adding logic to prevent this, but have decided | to embrace it as a feature rather than a bug. | | I quite like some of the small-ish maps, like this: | https://random-roads-- | edwardcunningh2.repl.co/#1592759118928 | y42 wrote: | Kind of reminds me of the algorithm to create a maze: | https://medium.com/swlh/how-to-create-a-maze-with- | javascript... ___________________________________________________________________ (page generated 2020-06-21 23:00 UTC)