ℝ³ - > ℕ映射有限数量的值

时间:2017-01-13 21:42:30

标签: math set mapping spatial

我正在寻找能够将有限但大量的3维位置(约10 ^ 11)映射到索引的算法(所以映射ℝ³ - >ℕ)

我知道制作一个ℕ - >是可能的,也是相当简单的。 ℝ³映射,这基本上是我想要做的,但是ℕ - > ℝ³是一种不切实际的方法,可以确定哪些指数在某个位置附近,

理想情况下,我还要确保我的有限子集ℕ不包含重复项。

关于如何实现这一点的一些背景知识,以便更好地了解这个问题的一些天真解决方案的约束和问题:

我正在尝试一种方法将星系中的恒星映射到一个唯一的ID,然后我可以将其用作随机数生成器的“种子”,ℕ - > ℝ³映射需要我迭代所有的ℕ来找到在给定位置附近的ℝ³的值,这显然不是一个实用的方法

我已经找到了一些关于cantor配对功能和鸠尾榫的信息,但是那些引起了问题,因为那些主要适用于ℕⁿ而不是ℝⁿ。

我无法保证我的ℝ³值遵循网格,如果他们确实可以映射ℝ³-> ℕ³通过弄清楚该值所在的“框”,然后使用cantor的配对函数来确定哪个ℕ属于该框,但在我的情况下,框可能包含多个值,或者没有。

提前感谢您提供任何帮助

1 个答案:

答案 0 :(得分:3)

您可以使用k-d tree对您的点集进行空间分区。要映射到自然数,请将通过树的路径作为二进制数字串处理,其中0是左分支,1是右分支。这可能无法满足您的需求,因为在空间上彼此靠近的某些点可能位于不同的分支上,因此在数字上彼此远离。但是,如果两个点在数字上彼此接近,它们将在空间上彼此接近。

或者,您也可以使用octree,在这种情况下,每次下降到树中的级别都会得到三位。您可以对空间进行完全分区,因此每个区域最多只包含一个兴趣点。