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

时间:2016-08-23 15:44:42

标签: c++ math

我实现了一个函数,该函数将0 - 159范围内的唯一数字的向量映射到0 - 119 160x120的新范围。

到目前为止,映射工作正常,每个数字都转移到正确的范围。我重复了这个第二个向量(新范围round()

我面临的问题是每对数字(每个向量中的一个)代表int图像中的位置,因此应该是唯一的。由于需要在返回浮点数的映射函数中进行除法,我使用Point -> new Range -> round() -------------------------------------- 177x(-99) -> 117.670x3.9608 -> 118x4 ! 176x(-99) -> 117.006x3.9608 -> 118x4 ! 转换为scope :created_between, -> (start_at, end_at) { where("? BETWEEN start_at AND end_at", 'users.created_at') } (116.341 - > 116)。但这会导致点对不再具有独特性的问题:

{{1}}

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

有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:1)

由于Dirichlet pigeonhole principle

,不可能为不同的整数范围(不同的权力集合)创建一对一的映射

请注意,如果可以进行可逆映射,您可以创建具有无限压缩的归档,并将任何大小的文件压缩到一个或几个字节,然后将其恢复