用于存储坐标的浮点或整数

Float or integer for storing coordinates

本文关键字:整数 存储 坐标 用于      更新时间:2023-10-16

我正在开发一个应用程序,该应用程序基本上与使用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位。您也可以将数字保存为可读的十进制,这可能是最明显的方法