我想虚拟化折线。在我的应用中,显示了多达七条折线,每条折线拥有多达九百万个点(当然只有一小部分可见)。每条折线都有一个与PointCollection的绑定。所有折线都在ScrollViewer控件内,滚动会影响它们中的每一个。
现在,我想知道折线的虚拟化是如何实现的。我发现了一篇关于来自微软的Chris Lovett的Virtual Canvas的文章,但我不确定它是否适用于我的问题。有没有人经历过这样的事情?
提前谢谢。
答案 0 :(得分:0)
我遇到了类似的情况,并决定实施虚拟化如下: 我正在处理的数据(折线的点)是真实世界坐标,并且比显示屏上显示的细节要多得多。用户还应该能够放大并查看更多细节。
循环点:
一个。如果当前点与前一点在显示器上的相同位置:跳过它。
湾如果当前点和前两个点位于一条直线上,则不需要前一个点:删除前一个点,添加当前(并添加下一个点(D)以防止将缓慢弯曲的曲线四舍五入到一条直线)。
使用收集的点绘制折线
根据数据,这有助于我将原始设置减少到大约30%,但这完全取决于数据。不保证;)
当用户放大时,我只需从步骤1开始重新计算。
我在算法中添加了很多参数,因此我可以对其进行调整和调整,以找到性能和图像质量之间的最佳点。例如,我添加了一个epsilon,它允许我指定通过A和C的线与B点之间的距离仍允许B点在线上。
如果有帮助,请告诉我。