在 WPF 中渲染巨大的视觉效果时,视觉效果会扭曲,并且随着坐标的增加扭曲得更加严重。我认为它与渲染管道中使用的浮点数据类型有关,但我不完全确定。无论哪种方式,我都在寻找解决问题的实际解决方案。
为了演示我正在讨论的内容,我创建了一个示例应用程序,其中仅包含嵌入在 ScrollViewer 中的自定义控件,用于绘制正弦曲线。
您可以在这里看到,对于双精度值
失真在 2^25 处变得更糟,因此失真会随着每增加一位而继续增加,直到仅绘制一些垂直线。
出于性能原因,我只是绘制图表的可见部分,但出于布局原因,我无法“虚拟化”控件,这将使这个问题变得过时。我能想到的唯一解决方案是将图形的可见部分绘制到位图,然后在适当的点渲染位图 - 但我再次遇到大值的精度问题,因为我无法准确地放置位图在我需要的位置。
有人知道如何解决这个问题吗?
这不是 WPF 的错。
浮点数离零越远,精度就越低 - 这是将巨大的数据范围(-Inf、+Inf)填充到 32(浮点)/ 64(双精度)位数据空间的成本。在 2^30 左右,浮点数实际上变得不如整数精确。
64 位整数具有恒定的间距 (1),但范围有限 -9,223,372,036,854,775,808 到 +9,223,372,036,854,775,807。
您也可以考虑使用 Decimal 类型(但其值范围也有限)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)