2016-08-23 52 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

注不同範圍(套不同功率的)一個一對一的映射,如果可逆的映射是可能的,你可以創建無限存檔壓縮並將任意大小的文件壓縮到一個或一些字節,然後恢復它

相關問題