Math ℝ³-&燃气轮机ℕ;有限个值的映射

Math ℝ³-&燃气轮机ℕ;有限个值的映射,math,set,mapping,spatial,Math,Set,Mapping,Spatial,我正在寻找一种算法,它能够将有限但大量的三维位置(大约10^11)映射到索引(即映射)ℝ³ -> ℕ) 我知道这是可能的,而且相当简单ℕ -> ℝ这就是我想做的,但是ℕ -> ℝ³将是一种不切实际的方法,无法确定ℕ 在某个位置附近, 理想情况下,我还希望确保ℕ 不包含重复项 关于如何实施这一点的一些背景信息,以便更好地了解该问题的一些简单解决方案的约束和问题: 我在想一种方法,把星系中的恒星映射到一个唯一的ID,然后我可以用它作为随机数发生器的“种子”,一个ℕ -> ℝ³映射需要我迭代所有ℕ 找

我正在寻找一种算法,它能够将有限但大量的三维位置(大约10^11)映射到索引(即映射)ℝ³ -> ℕ)

我知道这是可能的,而且相当简单ℕ -> ℝ这就是我想做的,但是ℕ -> ℝ³将是一种不切实际的方法,无法确定ℕ 在某个位置附近,

理想情况下,我还希望确保ℕ 不包含重复项

关于如何实施这一点的一些背景信息,以便更好地了解该问题的一些简单解决方案的约束和问题:

我在想一种方法,把星系中的恒星映射到一个唯一的ID,然后我可以用它作为随机数发生器的“种子”,一个ℕ -> ℝ³映射需要我迭代所有ℕ 找出ℝ在给定位置附近,这显然不是一种实用的方法

我已经找到了一些关于cantor配对函数和吻合的信息,但是这些会导致问题,因为它们主要适用于ℕⁿ 而不是ℝⁿ.

不能保证我的ℝ³值遵循网格,如果遵循,我可以映射ℝ³-> ℕ通过计算出值所在的“框”,然后使用cantor的配对函数计算出哪个框ℕ 属于该框,但在我的情况下,该框可能包含多个值,或者不包含任何值

提前感谢您提供的任何帮助。

您可以使用来对点集进行空间分区。要映射到自然数,请将通过树到每个点的路径视为二进制数字字符串,其中
0
是左分支,
1
是右分支。这可能无法准确地获取您要查找的内容,因为这样做了空间上彼此接近的me点可能位于不同的分支上,因此在数值上彼此距离较远。但是,如果两个点在数值上彼此接近,则它们在空间上彼此接近


或者,你也可以使用一个,在这种情况下,你每下降到树中的每一层一次得到三个位。你可以完全划分空间,使每个区域最多包含一个感兴趣的点。

我最初对此有点怀疑,认为这可能需要非常大量的数据,但是经过一段时间后考虑到这一点,我得出了这样的结论:我可以使用一个64位的数字来存储索引,而对于一棵3d树,假设银河系(直径约100000光年)这样的星系,我需要每个细分3位(8个值从000到111),这将给我一个“盒子”每一唯一指数大约为0.05*0.05*0.01光年,任何两颗相距小于1光年的恒星都应该被视为双星系统