实现Birdson的Poisson-Disc分布时使用哪种数据结构

Joh*_*ler 5 haskell data-structures

我正在尝试( :: (Float,Float))使用Haskell 编写一个使用Poisson-disc分布创建一组点的函数.我使用Birdson的算法描述迈克·博斯托克的博客.

点保持在网格中,使得每个单元永远不会超过一个点.通过这样做,最近邻居问题从O(n)减少到O(1).

我的问题是这个网格使用什么样的数据结构.JavaScript使用可变数组和for循环,因为命令式语言倾向于这样做.我可以使用Vectors复制这种方法,但我觉得可能有更好的功能数据结构.

什么结构可能适合这个网格?这是一个使用Comonads的地方吗?

小智 0

对于最近邻问题,有一个称为 Voronoi 图的通用结构。通过该图上的点位置,您可以在 O(log n) 中找到最近邻。我认为 O(1) 是不可能的,除非您的问题有其他一些特定的功能。对于点定位,可以使用Edelsbrunner的链式方法,或者Sleator和Tarjan的持久二叉搜索树。您可能会在GLib中找到 C 实现。希望您也能找到用 javascript 实现的这些算法和数据结构:js voronoi