1

または、赤い線がアクセント/スロープ/クライムアップを開始していることをどのように検出できますか?

私はこのコードを持っています:

for (int i = 0; i < averagesOriginal.Count - 69; i++)
            {
                int y = i + 35;
                if (averagesOriginal[y] <= resultings[i])
                {
                    if (averagesOriginal[y] >= resultings[i])
                    {
                        //MessageBox.Show("above");
                    }
                }
            }

averagesOriginalリストはグラフに赤い線を表示し、結果のリストは黒い線を表示します。赤い線が黒い線より上に上がり始めている場所を見つける必要があります。赤い線と黒い線を示すグラフの画像を添付し、それが始まるべきだと思う場所を黒い線でマークしました。

左の2つのシキュールは、赤い線が黒い線より上に上がり始める場所であると思います。

グラフ全体で、黒よりも赤に登り始める場所のインデックス(および各インデックスの数値)を見つける必要があります。

黒の上にあるすべての赤は必要ありません。開始する場所だけが必要です。

2つのインデックスである必要があります。

条件は次のとおりです。最初のインデックスは黒の下の赤で、次の1つのインデックスの前方では黒の上にある必要があります。

最初のグラフを見ると、赤は常に黒の下にあります。赤が黒の下にあり、次の単一のインデックスで赤が黒の上にある場所をどうにかして見つける必要があります。これは、赤が登り始めることを意味します。

それで、どうすれば私のコードに従ってそれを行うことができますか?

(添付の画像では、私が描いた左の2つの黒い円は、最初の赤いインデックスが黒の下にあり、次の赤いインデックスが黒い上にあります。これは私が検索する必要がある場所です。

ここに画像の説明を入力してください

4

1 に答える 1

1

線が現在どこにあるかを追跡する旗を保持し、通過するときに旗を反転させることができます。

bool isRedBelow = averagesOriginal[0] < resultings[0];

for (int i = 0; i < averagesOriginal.Count - 69; i++)
{
    int y = i + 35;

    if (isRedBelow && averagesOriginal[y] > resultings[i])
    {
        isRedBelow = false;
        MessageBox.Show("Red is now above");
    }
    else if (!isRedBelow && averagesOriginal[y] < resultings[i])
    {
        isRedBelow = true;
        MessageBox.Show("Red is now below");
    }
}

線が交差すると、旗が反転します。これにより、いくつあっても各フリップをつかみ続けることができます。

あなたが何を望んでいるのかよくわからなかったので、私は意図的にequalケース(>=または)を処理しませんでした。<=それらが等しい場合、それは乗換えの過程にあるためであるというのは安全な仮定かもしれませんが、それらが等しい場合があるかどうかはわかりませんが、赤い線はその瞬間にコースを逆にします。それはあなたにお任せします。

また、最初のisRedBelow割り当てでは、配列Length > 0にが含まれているかどうかは確認しませんでしたが、問題ではないと推測しています(問題がある場合は、修正できます)。

false/trueの状態の管理isRedBelowが混乱する場合は、列挙型に置き換えてください。おそらく次のようになります。

enum RedLinePosition
{
    BelowBlack,
    AboveBlack,
    EqualToBlack //if necessary
}

編集:ループ内、またはオフセット- 69で何が起こっているのかよくわかりません。それらは問題の範囲外だと思います。しかし、私はオフセットが補償するためにあり、それらの要素が並んでいないと仮定しています。とがその点での両方の線のグラフ上の座標を表すことになっている場合は、ループするインデックスを修正して、それらが一致するようにすることをお勧めします。forint y = i + 35averagesOriginalresultingsaveragesOriginal[N]resultings[N]YX = N

于 2012-11-19T15:46:48.403 に答える