在从一个范围映射到另一个范围时避免重复值
Avoid duplicate values when mapping from one range to another
我实现了一个函数,该函数将唯一数字在(-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鸽子洞原理,不可能对不同范围的整数(不同幂的集合)创建一对一的映射
请注意,如果可逆映射是可能的,您可以创建无限压缩的归档器,并将任意大小的文件压缩到一个或几个字节,然后恢复它
相关文章:
- 使用std::transform将一个范围的元素添加到另一个范围中
- 有没有办法在另一个函数中加入线程?(即超出其自身范围)
- 如何将一个范围替换为矢量中的另一个范围?
- 包含来自另一个文件的函数会导致范围错误(openFoam)
- 将整数范围映射到另一个范围
- 基于范围的 for 循环将对象移动到另一个容器中?
- 无法从另一个函数访问文件范围变量的内容
- 当在另一个范围中,将SelfAdjointeigensolver保存为成员的结果被重新引入
- 在另一个分配的矩阵中为特定范围创建 cv::Mat 标头
- 如何在 C++ 的字符串中打印从一个索引到另一个索引的字符范围
- 基于范围的循环使用另一个运算符
- 更快的方法将数字从范围转换为另一个范围
- 如何调用其原型在另一个函数中范围内的函数
- 防止变量脱离范围,因此它们仍然存在另一个线程
- Linux的VirtualQueryEx替代方案-如何获得另一个进程的虚拟内存范围
- 如何检查一个范围内的值是否是另一个范围内的值的倍数
- 在此范围内没有声明另一个c++错误
- 在从一个范围映射到另一个范围时避免重复值
- 以一种漂亮的STL方式检查一个范围是否是另一个范围的子范围
- 命名空间范围的模板函数在另一个命名空间中可见