Functional Quadtrees

(lbjgruppen.com)

45 points | by lbj 2 hours ago ago

16 comments

  • marvinborner 27 minutes ago

    Quadtrees are also quite useful for generating fractals. A very related project of mine, Lambda Screen [0], explores this by encoding these functional quadtrees directly in lambda calculus and rendering the structure based on Church booleans being true (white) or false (black).

    With fixed point recursion, this allows for very tiny definitions of IFS fractals. For example, fractals like the Sierpinski triangle/carpet only require ~50 bit of binary lambda calculus [1] [2]!

    [0]: https://text.marvinborner.de/2024-03-25-02.html

    [1]: https://lambda-screen.marvinborner.de/?term=ERoc0CrYLYA%3D

    [2]: https://lambda-screen.marvinborner.de/?term=QcCqqttsFtsI0OaA

  • torusle an hour ago

    "I could only find a couple tutorials/guides and both were imperative"

    Aren't Quadtrees covered by almost all basic data-structure books? It is the most simple form of taking the binary tree into the next (2D) dimension.

    • pixelpoet an hour ago

      You can even build them with basically one line of code by sorting points using Morton / Z-curve order. It's linear time if you use a counting/radix sort.

      Edit: lol, downvoted for this post. Never change, HN.

      • quibono 31 minutes ago

        I'd love to see that. Could you link me to an implementation or explain this in more detail please?

      • pavlov 33 minutes ago

        It’s super easy to click the downvote button by accident on mobile when you meant to upvote. And this UI will never be fixed because this is HN after all.

        • jasonjmcghee 4 minutes ago

          Zoom in or unvote/revote

        • craftkiller 25 minutes ago

          This is precisely the reason that I do not log in to HN on my phone. My phone is read-only and if I want to upvote or comment then I have to switch to my laptop. Pretty easy with firefox because I can send tabs to other devices.

  • Waterluvian 2 hours ago

    I love the visualization, which gave me an idea: what if we numbered every "Looking at" step in the visualization? Then it's obvious just how many search steps it takes.

    And then maybe even juxtapose that with a linear search example, which also numbers every step. I bet this would make it really click for some people. And for free the user can also play with how a linear search can sometimes be faster when they just want the first element!

    As a bonus: allow the user to change the cell count so they can really feel just how each method scales!

  • OisinMoran 2 hours ago

    Neat! Weirdly sending this article from my phone (Pixel 8) to my browser (Arc) via Pushbullet resulted in an incredibly strange bug that it loads this site instead:

    https://www.lindelystables.dk/en/posts/functional-quadtree-c...

    Got very confused! I challenge the HN hivemind to figure out what's going on.

    • mutkach an hour ago

      I remember Arc randomly rewriting my bookmarks using some kind of summarization model or something like that, it also sometimes changed the name of downloaded files reinterpreting their names. Maybe it is related somehow.

      Well, I guess it was the first AI-first browser, hence all this bs. I uninstalled it months ago...

      • OisinMoran an hour ago

        Yeah that feature was nice at the start then got very annoying. Still like the browser though. Weirdly enough chrome on my phone has been reporting the wrong URLs, usually one I've just been on.

    • lbj an hour ago

      Apologies! I think I might have a found an eager redirect on the server. I haven't been able to reproduce, but you're not the first to report it. I hope it's fixed now.

  • willvarfar an hour ago

    A general quadtree implementation question that puzzled me when I was implementing it myself for hobby games was: do you store a rectangle in the smallest node that completely contains it?

    Most code that I saw that used quadtrees were treating things as points and storing them only at the lowest level.

    I also made mine auto-divide by counting items that are entirely in a quadrant as they are added to the node, with allocate and split triggered if a count went above a certain threshold.

    Anything novel or oopsie?

  • runemadsen an hour ago

    We just did a whole visual identity around the quadtree concept. Take a scroll on this one! https://trace.systems/

    • dwb 24 minutes ago

      That all sounds incredibly dystopian, ugh.

  • wiz21c an hour ago

    I think it is weird to have two cells divided downto their smallest size when my cursor clearly occupies only one of them, not two.