C++ 如何从曲线(2D阵列)中找到不规则部分(具有峰值)?

C++ 如何从曲线(2D阵列)中找到不规则部分(具有峰值)?,c++,C++,我有以下形式的一些曲线,我想删除绿点和黄点内的部分。有人知道能做到这一点的快速算法吗 红点和黄点可能很容易找到,我认为问题在于绿点 谢谢 您可以找到点[i]、点[i+1]、点[i+2]之间的角度;对于大多数点,它将接近圆周率,但对于绿色、红色和黄色点,角度将不同于圆周率。@AndrewKashpur谢谢!但对于每条曲线,我有一千个端点。它们相当密集。点[i]、点[i+1]、点[i+2];我什么也没说。如果你有太多的点,每三分之一取一次(第五,第十,取决于你的数据)。比角度更稳健的方法:取K个后续

我有以下形式的一些曲线,我想删除绿点和黄点内的部分。有人知道能做到这一点的快速算法吗

红点和黄点可能很容易找到,我认为问题在于绿点

谢谢


您可以找到点[i]、点[i+1]、点[i+2]之间的角度;对于大多数点,它将接近圆周率,但对于绿色、红色和黄色点,角度将不同于圆周率。@AndrewKashpur谢谢!但对于每条曲线,我有一千个端点。它们相当密集。点[i]、点[i+1]、点[i+2];我什么也没说。如果你有太多的点,每三分之一取一次(第五,第十,取决于你的数据)。比角度更稳健的方法:取K个后续点的子集,得到K-1向量,你可以计算该K-1向量的数学期望和离散度,而不是将离散度与某个阈值进行比较:如果离散度高于阈值,则会发生从一般方向的去平面。你需要校准K,阈值和检查之间的步长,以使其对数据起作用。您可以找到点[i]、点[i+1]、点[i+2]之间的角度;对于大多数点,它将接近圆周率,但对于绿色、红色和黄色点,角度将不同于圆周率。@AndrewKashpur谢谢!但对于每条曲线,我有一千个端点。它们相当密集。点[i]、点[i+1]、点[i+2];我什么也没说。如果你有太多的点,每三分之一取一次(第五,第十,取决于你的数据)。比角度更稳健的方法:取K个后续点的子集,得到K-1向量,你可以计算该K-1向量的数学期望和离散度,而不是将离散度与某个阈值进行比较:如果离散度高于阈值,则会发生从一般方向的去平面。你需要校准K,阈值和检查之间的步长,以使其对您的数据起作用。