3

Point2D(2つのメンバーxと)で構成される配列があります。yたとえば、Point2D[] points。この配列は、XYグラフ上の一連の点と考えることができます。配列は、小さい方Point2D.Xから大きい方に配置されるように並べ替えられますPoint2D.X

私の質問は単純です:極大値/極小値であるポイント(およびそれらのポイントの直前と直後の対応するアイテムインデックス)をどのように見つけますか?ローカルの最大/最小は数学的にとして定義されていることを思い出してくださいdy/dx=0。だから私の仕事は、それらのポイントを見つける必要があるということですdy/dx=0

Point2Dグラフは滑らかな曲線であり、直線的な区分的ポリラインではないため、極値は配列のすぐ内側にある場合とない場合があることに注意してください。極値は、配列内の2つの点の中間点である可能性があります。例えば。

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

これがあなたが探しているものかどうかはわかりません:ここに示すように、XNA フレームワーク (C#) を使用して簡単に計算できるCatmull-Rom スプライン

アイデアは、局所最大値に達するまで、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 に答える