当用户绘图时,每次输入事件触发时我都会捕获他们输入的位置,然后在每个点之间绘制直线。
不幸的是,这会产生非常参差不齐的外观,并且根据用户移动输入的速度相对于输入事件触发的速度,情况会变得更糟。
我想要的是一个函数,它接受一个点数组并返回一个已经被平滑的点数组,既可以填充点之间的任何大间隙,也可以去除锯齿状边缘并将它们替换为平滑曲线。
我知道这是一个众所周知的问题,只是没有运气形成搜索查询来找到我要找的东西。
谢谢!
如果函数已经用 c# 编写,则加分 :)
谢谢!
最佳答案
float数组c#的扩展方法(sample)
public static NoiseReduction(this float[] src, int severity = 1)
{
for (int i = 1; i < src.Length; i++)
{
//---------------------------------------------------------------avg
var start = (i - severity > 0 ? i - severity : 0);
var end = (i + severity < src.Length ? i + severity : src.Length);
float sum = 0;
for (int j = start; j < end; j++)
{
sum += src[j];
}
var avg = sum / (end - start);
//---------------------------------------------------------------
src[i] = avg;
}
}
关于c# - 从点数组平滑二维线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7811761/