4

曲線の傾きがほぼ一定かどうかを判断する方法に取り組んでいます。

もちろんx,yポイントも含まれます。yこれまでに行ったことは、各データ ポイントをそのデータ ポイントで割って、そのデータ ポイントxの勾配を取得することです。この斜面をList<double>

これまでのところ、私は正しい軌道に乗っていると思います (そうでない場合は教えてください!)。一定の曲線を扱うかどうかを決める時が来たので、以下の方法になりました。

private bool IsConstantSlope(List<double> slopes)
{            
    var max = slopes.Max();
    var min = slopes.Min();
    var diff = max - min;

    return (diff > 0.01) ? false : true;        
}

したがって、ここで勾配の最大値と最小値をチェックし、それをカスタムしきい値と比較しますが、これはまったく良くありません。

この方法は、完全に一定の傾斜線には適していますが、ある程度の柔軟性を持たせたいと考えています。最大値と最小値の差を定数と比較することは良い方法ではないと思います。

もっとアイデアを評価します!

4

2 に答える 2

6

もちろん、x、y ポイントが関係しています。これまでに行ったことは、各データ ポイントの y をその x で割って、そのデータ ポイントの勾配を取得することです。この斜面をリストに保存します

厳密に言えば、ポイントには傾きがありません。ここで測定しているのは、ポイント (x,y) とポイント (0,0) を結ぶ線の傾きです。したがって、順序付けられた点のセットに対してこれを行う場合、単一の線を持つという概念はまったく正しくありません。隣接する点を結ぶ線の傾きのセットさえありません。また、あなたの機能で

 return (max > 0.01) || (min < -0.01);

しきい値が 0.01 の場合はより適切です。

点のセットに適合または近似する線が本当に必要な場合は、まずデータに対してある種の直線回帰を実行し、この近似線の勾配をテストして、しきい値の範囲内にあるかどうかを確認する必要があります。

これは役に立つかもしれませんhttp://en.wikipedia.org/wiki/Simple_linear_regression

または、ポイントを x 値で並べ替えてから、連続する各ペア間の勾配を計算し (効果的にポリラインを生成)、これらをリストに保存してから、勾配カンパリソン関数を使用することもできます。

于 2012-07-06T08:33:42.620 に答える
3

勾配のセット全体に作用する再帰アルゴリズムを設計します。最小/最大勾配のみを考慮しても、曲線全体については何もわかりません。まず最初に、「一定の勾配」を決定するために、2 つの勾配 A と B が満たさなければならない要件を確認します。次に、リストの最初の (A) と最後の (B) の値を検討します。2 つの値は要件を満たしていますか? いいえ: 一定の勾配はありません。はい: 範囲 (A,B) を (A,M)、(M,B) の 2 つの部分範囲に分割します。ここで、M はリスト内で A と B から等距離にある値です。次に、同じアルゴリズムを 2 つに適用します。サブレンジ。サブ範囲の数は、達成したい精度によって異なります。

于 2012-07-06T08:48:03.797 に答える