假设我有两个 3D 点云,它们代表变换的起点和终点。现在我想将起点和终点点云信息都存储到数据库中,但数据库只允许输入一个点云。有没有什么方法可以将一个“代表性”点云的 3D 坐标存储为标识符,以便始终可以从该标识符再现起点和终点点云(例如使用数学变换或散列的某些固定规则)?
我们可能需要数据库施加的限制的更具体细节,以及点本身的性质(正/负、整数/有理数/实数等)来提供具体的答案。不过,我至少会在下面提供一些建议。
数据库是否严格限制为 3 维?如果它可以支持 6+ 维数据,只需对额外轴中的第二个点进行编码即可。如果它至少可以支持 4 个维度,您可以使用第 4 个维度作为每个点的唯一标识符,合并到两个点云,并通过第 4 个维度将起点/终点配对。
这些点是整数坐标吗?如果是这样,您可以使用 Cantor 配对函数 将
x1
和 x2
映射到单个唯一整数 x3
,并对每个点的 y 和 z 坐标执行相同的操作。如果它们不是整数,但精度不是一个大问题,您可以按某个大系数放大坐标,然后四舍五入到最接近的整数,然后应用配对技巧。
如果精度允许,你也可以将这两种策略结合起来。假设您的点在 x 轴上跨度为
[-1e3, 1e3]
,那么您不需要太多的精度。您可以将 k * 1e4
添加到第 k 个起点/终点的 x 分量。如果您按新的 x 分量对点进行排序,它会将起点和终点配对。您可以对 y 或 z 分量执行类似的操作来区分是开始还是结束。当然,您可以通过将每个分量对您的倍数取模来恢复原始点。