首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何绘制平滑/圆角/曲线图形?(C#)

问如何绘制平滑/圆角/曲线图形?(C#)
EN

Stack Overflow用户
提问于 2010-12-08 23:00:48
回答 5查看 7.1K关注 0票数 7

我正在测量一些系统性能数据,以便将其存储在数据库中。根据这些数据点,我绘制了随时间变化的折线图。在他们的本质上,这些数据点是有点嘈杂的,即。每一个点都至少偏离局部平均值一点。当从一个点到另一个点直接绘制折线图时,它会生成锯齿图。在一个大的时间尺度上,比如每像素> 10个数据点,这个噪声被压缩到一个宽的锯齿状的线条区域,比如说,20px高,而不是在更小的尺度上的1px。

我读过关于线条平滑,抗锯齿,简化和所有这些东西。但我发现的一切似乎都与其他东西有关。

我不需要抗锯齿,在屏幕上绘制线条时,.NET已经为我做过了。

我不想简单化。我需要极值保持可见,至少是大多数极值。

我认为它是在样条曲线的方向上进行的,但我找不到太多的示例图像来评估所描述的东西是否是我想要的。我确实在Google Books上找到了一本很科学的书,里面满是半页长的公式,我现在都不想读了……

举个例子,看看Linux/Gnome的系统监视器应用程序。我用平滑的线条绘制了最近的CPU/内存/网络使用情况。这可能有点过于简单,但我会试一试,看看我是否可以调整它。

我更喜欢C#代码,但算法或其他语言的代码也可以,只要我可以将其移植到C#而不需要外部引用。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-12-09 00:32:40

你可以做一些数据平滑。不使用真实数据,而是应用简单的平滑算法来保持峰值,就像Savitzky-Golayfilter一样。

You can get the coefficients here。

最简单的方法是:

取我链接到的网站上的前几个系数:

代码语言:javascript
复制
// For np = 5 = 5 data points
var h = 35.0;
var coeff = new float[] { 17, 12, -3 }; // coefficients from the site
var easyCoeff = new float[] {-3, 12, 17, 12, -3}; // Its symmetrical
var center = 2; // = the center of the easyCoeff array

//现在,对于数据中的每个点,您都会计算一个平滑点:

代码语言:javascript
复制
smoothed[x] = 
   ((data[x - 2] * easyCoeff[center - 2]) +
    (data[x - 1] * easyCoeff[center - 1]) +
    (data[x - 0] * easyCoeff[center - 0]) +
    (data[x + 1] * easyCoeff[center + 1]) +
    (data[x + 2] * easyCoeff[center + 2])) / h;

当使用5个点时,前2个点和最后2个点不能平滑。

如果你想让你的数据更加“平滑”,你可以用更大的数据点来试验系数。

现在,您可以通过“平滑”数据绘制一条线。np =点数越大,数据就越平滑。但你也会失去峰值精度,但当简单地将一些点平均在一起时,就不会失去那么多了。

票数 6
EN

Stack Overflow用户

发布于 2010-12-09 00:04:29

您无法在图形代码中修复此问题。如果你的数据是有噪声的,那么无论你使用哪种线条平滑算法,图形也会有噪声。您需要首先过滤数据。使用从原始数据插值的点创建第二个数据集。最小二乘拟合是一种常用的技术。平均很容易实现,但往往会隐藏极端情况。

票数 2
EN

Stack Overflow用户

发布于 2010-12-08 23:08:20

我认为你正在寻找的是一个提供“样条线”的例程。这里有一个描述样条线的链接:

http://en.wikipedia.org/wiki/Spline_(mathematics)

如果是这样的话,我没有任何关于样条库的建议,但最初在谷歌上搜索发现了一堆。

很抱歉没有代码,但希望了解这些术语会对您的搜索有所帮助。

鲍勃

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4388911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档