在从一个范围映射到另一个范围时避免重复值

Avoid duplicate values when mapping from one range to another

本文关键字:范围 另一个 映射 一个      更新时间:2023-10-16

我实现了一个函数,该函数将唯一数字(-109) - 147范围内映射到0 - 159的新范围。

到目前为止,映射工作良好,每个数字都被传输到正确的范围。我对第二个矢量(新范围0 - 119)重复了这一点

我面临的问题是,每一对数字(每个向量一个)代表160x120图像中的一个位置,因此应该是唯一的。由于需要在返回浮点数的映射函数中进行划分,我使用round()转换为int(116.341 -> 116)。但这会导致点对不再是唯一的问题:

Point     ->    new Range   -> round()
--------------------------------------
177x(-99) -> 117.670x3.9608 -> 118x4 !
176x(-99) -> 117.006x3.9608 -> 118x4 !

正确映射到所需的范围,但现在表示相同的点并且不再是唯一的。重要的是:每个点都被映射到新的范围,并且没有信息丢失,例如重复项被丢弃。(点对保存着进一步的颜色信息,这些信息必须保持。)

有办法解决这个问题吗?

由于Dirichlet鸽子洞原理,不可能对不同范围的整数(不同幂的集合)创建一对一的映射

请注意,如果可逆映射是可能的,您可以创建无限压缩的归档器,并将任意大小的文件压缩到一个或几个字节,然后恢复它