用于存储坐标的浮点或整数
Float or integer for storing coordinates
我正在开发一个应用程序,该应用程序基本上与使用MFC的api在图像上绘制注释有关。绘制这些注释所需的坐标保存在xml文件中。它还处理更改图像缩放级别时注释的缩放。
问题是,当缩放坐标时,即时结果是双倍或浮动的,但我们将结果保存为整数,这会导致大量错误/偏差。
将坐标保存为xml中的float,同时对float执行即时操作会很好吗?
最后将其转换为整数,以便在LineTo()、MoveTo()等需要较长时间的api中使用。
任何关于这方面的建议或建议都将非常有帮助。
感谢
我使用图形管道已经有一段时间了。
对于涉及扩展的东西,我坚持将所有数据存储为doubles。尤其是当您计划从整数转换为浮点,从浮点转换为整数时。缩放时的误差也要小得多。
将这些值以不同于整数的方式存储在XML中并没有害处。
此外,现在的CPU已经针对浮点运算进行了优化。
将坐标序列化到xml中时,可以使用reinterpret_cast<int>
将它们简单地保存为一个整数,该整数具有与浮点相同的二进制表示形式。相反,在反序列化过程中,使用reinterpret_cast<float>
恢复原始编号。以这种方式保存/加载时不应丢失精度。
就错误而言,解决方案很简单:不要保存为整数。保留float(我甚至支持PhoenixX_2升级为doubles的建议),然后在绘制时将其强制转换为临时int变量。
edit:请注意,如果您决定使用double而不是float,那么在序列化期间需要考虑到这一点,因为double是64位,而不是32位。您也可以将数字保存为可读的十进制,这可能是最明显的方法
相关文章:
- 添加存储在向量中的大整数的函数出现问题
- 查找存储在二叉搜索树的所有非叶子中的数据总和?(返回整数的独立递归函数
- 整数数据如何以位为单位存储在内存中?不是右对齐吗?
- 当我尝试将范围值存储为 8 位的固定宽度整数时,它向我显示一些其他值 [ASCII]
- 将大数字(10-12 位数字)存储在无序映射中<字符串,整数>
- GMP-将64位整数存储在mpz_t/mpz_class中,并返回64位整数
- 如何从字符数组C++中提取2个整数并将它们存储在2个变量中(初学者)
- 从文件中读取后,将分号分隔的整数存储到数组中
- 将25个甚至整数存储到一个名为intlist的整数阵列中,然后在屏幕上显示数组,并在屏幕上显示名为fivintegers
- 如何将整数存储在字符阵列中
- 将 10 个整数存储到数组C++中时出现问题
- 将多个整数存储在字符串中
- 将多个整数存储到数组中并打印出来
- 如何将用户输入的 5 个整数存储在数组中并打印出整个数组
- 在 c++ 中将随机生成的整数存储为变量
- 如何将整数存储在字符数组的单个索引中
- C++ 读取文件并将整数存储在向量中.最终占用的驻留内存大约是实际文件大小的 5 倍
- 如何将.txt文件中的特定整数存储在结构数组中
- 将文件中的64*64整数存储到2D数组中
- C++将多个整数存储在一个int变量中