3

Point2D我有一个由( 有两个成员x和)组成的数组y,例如Point2D[] points. 您可以将此数组视为 XY 图上的一系列点。数组的排序方式是从小Point2D.X到大排列Point2D.X

我的问题很简单:您如何找到作为局部最大值/最小值的点(以及这些点之前和之后的相应项目索引)?回想一下,局部最大值/最小值在数学上定义为dy/dx=0。所以我的任务是我需要找到dy/dx=0.

请注意,极值点可能位于也可能不在Point2D阵列内,因为图形是平滑曲线,而不是线性分段折线。极值点可以是数组内两个点的中点。例如。

是否有任何现有的库/组件已经在 C# 中执行此操作?

这是我的方法:

public class Point2D
{
  public double X;
  public double Y;
}

public class PointWithIndex
{
  // the extreme point where dy/dx=0
  public Point2D ExtremePoints;
  // the index of the array for the point that locates right before this ExtremePoints
  public int PrevItemIndex;

}

public static List<PointWithIndex> FindLocalExtrema(List<Point2D> xyPoints)
{
  // the algorithm to find the max/min points of xyPoints
}
4

2 回答 2

0

我不确定这是否是您正在寻找的:Catmull-Rom Spline,您可以使用 XNA 框架(在 C# 中)轻松计算,如下所示

这个想法是:您将使用 Catmull-Rom 生成 - 迭代或递归 - 点,直到达到局部最大值。

于 2012-04-12T04:57:49.417 回答
0

我建议运行一个循环 0 < i < n - 1,检查是否 P[i - 1].Y < P[i].Y && P[i + 1].Y < P[i].Y,然后检查 P[ i] 是最大值。对 min 做同样的事情。

于 2012-04-12T03:03:40.710 回答