Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF画布作为数学绘图区域_C#_Wpf_Xaml_Math_Canvas - Fatal编程技术网

C# WPF画布作为数学绘图区域

C# WPF画布作为数学绘图区域,c#,wpf,xaml,math,canvas,C#,Wpf,Xaml,Math,Canvas,在我的图形计算器中,我使用画布作为一个平面,在这个平面上渲染函数的图形。我注意到,每当我输入复杂的函数时(我使用贝塞尔曲线,因此函数越复杂->需要渲染的点越多,图形看起来就越平滑),它就会变得非常滞后,总体上表现不好 以下哪种解决方案的计算成本最低/因此是最佳方法 1。(我当前的解决方案)在ScrollViewer中使用巨大的画布,限制查看区域 我发现: 渲染整个画布,甚至是不可见的部分 当画布上的元素超过50K时,开始延迟 2。仅使用不太大的画布,并通过TransformMatrix管

在我的图形计算器中,我使用画布作为一个平面,在这个平面上渲染函数的图形。我注意到,每当我输入复杂的函数时(我使用贝塞尔曲线,因此函数越复杂->需要渲染的点越多,图形看起来就越平滑),它就会变得非常滞后,总体上表现不好

以下哪种解决方案的计算成本最低/因此是最佳方法

1。(我当前的解决方案)在ScrollViewer中使用巨大的画布,限制查看区域

我发现:

  • 渲染整个画布,甚至是不可见的部分

  • 当画布上的元素超过50K时,开始延迟

2。仅使用不太大的画布,并通过TransformMatrix管理平移/缩放

缺点我认为可能有(未尝试的解决方案):

  • 当它不得不重新绘制和重新计算所有动态数据时,它会不会更加滞后
3。其他一些解决方案?


任何帮助都将不胜感激。

如果您可以避免,您真的不想使用离散的视觉效果来表示图表之类的东西;它们非常沉重,并且不断参与输入处理和布局。我建议直接使用WPF的绘图/几何API。我建议实现一个自定义控件,它执行自己的呈现(请参见
OnRender
)。我还建议实现
IScrollInfo
,以便您可以管理自己的滚动:您将始终知道视口的大小和位置,这使您可以选择在滚动时使几何体无效,然后仅重建图形中实际在视图中的部分。这将大大减少开销。

您看过BitmapCache吗?谢谢,这可能有助于解决渲染问题!但“画布问题的正确选择”依然存在。是的,我知道,但像这样的问题很难回答,你需要自己测量和实验。我想一定大小的画布加上BitmapCache就可以了。谢谢,我会试试的。