2016-08-23 50 views
0

当我实现了一个功能,即在的(-109) - 147范围唯一编号向量映射到的0 - 159新的范围如下因素this避免重复的值从一个范围映射到另一个

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

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

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

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

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

+0

Unique +“_mapping_”+仅两个变量=使用'#include '中的'std :: map'。编辑:哦,所以你想保持重复但仍然使用round()? –

+2

范围[0,159]有160个整数,所以很明显,如果你的矢量超过160个元素,就不可能将其成员唯一映射到新范围。 – Mark

+0

不太清楚 - 你想要新的范围数字是唯一的吗?这显然是不可能的。 – Slava

回答

1

这是不可能创造整数由于狄氏pigeonhole principle

注不同范围(套不同功率的)一个一对一的映射,如果可逆的映射是可能的,你可以创建无限存档压缩并将任意大小的文件压缩到一个或一些字节,然后恢复它

相关问题