首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有可能用OxyPlot中的ContourSeries获得更平滑的轮廓线?

有没有可能用OxyPlot中的ContourSeries获得更平滑的轮廓线?
EN

Stack Overflow用户
提问于 2019-07-24 03:33:42
回答 1查看 541关注 0票数 1

我使用OxyPlot来绘制轮廓,但是在某些地方它们看起来有点粗糙,所以我需要对它们进行平滑处理。所以,我想知道是否有可能用OxyPlot来平滑轮廓,或者我是否需要其他东西?

我知道您可以平滑LineSeries,所以通过查看LineSeries的代码,我尝试将平滑代码放在ContourSeries中,但我不太能弄清楚一切是如何工作的。我试图在互联网上找到平滑算法,但我找不到很多算法,而且我尝试的那些算法根本不起作用。

此外,我曾尝试寻找另一个库来绘制等高线,但OxyPlot似乎是最好的免费的WPF,但如果你有其他建议,可以给我更好的结果,我将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-26 04:38:47

经过进一步的搜索,我发现了一个算法,它做得很好,但一些需要关闭的行却不是,但与我尝试的其他算法相比,性能真的很好。

下面是算法

代码语言:javascript
运行
复制
private void SmoothContour(List<DataPoint> points, int severity = 1)
    {
        for (int i = 1; i < points.Count; i++)
        {
            var start = (i - severity > 0 ? i - severity + 1 : 0);
            var end = (i + severity < points.Count ? i + severity + 1 : points.Count);

            double sumX = 0, sumY = 0;

            for (int j = start; j < end; j++)
            {
                sumX += points[j].X;
                sumY += points[j].Y;
            }

            DataPoint sum = new DataPoint(sumX, sumY);

            DataPoint avg = new DataPoint(sum.X / (end - start), sum.Y / (end - start));

            points[i] = avg;

        }
    }

它基于这样的方法:https://stackoverflow.com/a/18830268/11788646

之后,我将这个方法放在ContourSeries类中,如下所示:

代码语言:javascript
运行
复制
List<Contour> smoothedContours = new List<Contour>();

for (int i = 0; i < contours.Count; i++)
{
    List<DataPoint> smoothedPoints = new List<DataPoint>(contours[i].Points);

    for (int j = 0; j < SmoothLevel; j++)
    {
        SmoothContour(smoothedPoints);
    }

    Contour contour = new Contour(smoothedPoints, contours[i].ContourLevel);
    smoothedContours.Add(contour);
}

contours = smoothedContours;

它位于JoinContourSegments()方法调用之后的CalculateContours()方法中。我还添加了一个SmoothLevel属性来为线条添加更多的平滑度。它越高,线条就越平滑,但当它设置得太高时,它就不会做得太好。所以我保持在10,这是很好的。

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

https://stackoverflow.com/questions/57171028

复制
相关文章

相似问题

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