当红线开始在黑线上方移动时,我如何检测到这些位置?

时间:2012-11-19 15:28:42

标签: c# graph plot

或者我怎样才能检测到红线何时开始提示/倾斜/爬升?

我有这段代码:

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 List显示图表中的红线,结果列表显示黑线。 我需要找到红线开始爬到黑线上方的地方。 我附上了一张显示红线和黑线的图形图像,我用黑色的线条标记了我认为应该在它开始的地方。

我认为应该是红线开始爬上黑线的左侧两个小块。

我需要找到整个图形中的位置的索引(以及每个索引中的数字),它开始在黑色上爬红色。

我不需要黑色上面的所有红色只有它开始的地方。

它应该是两个索引。

条件应该是:第一个指数是红色在黑色下面然后在下一个单个指数前面它应该在黑色之上。

如果你在开始时看图表,红色一直在黑色下面。 我需要找到某种方式,红色在黑色下面,在nexto ne单指数中,红色在黑色上方。这意味着红色开始攀升。

那么我怎么能按照我的代码来做呢?

(在附图中,我绘制的左边两个黑色的cicrucles显示黑色下面的第一个红色索引,然后下一个红色索引位于黑色上方。这是我应该搜索的地方。

enter image description here

1 个答案:

答案 0 :(得分: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,但我猜这不是问题(如果是,你可以解决它)< / p>

如果管理false/true的{​​{1}}状态变得混乱,请随意用枚举替换它,或许类似于:

isRedBelow
编辑:我不太确定enum RedLinePosition { BelowBlack, AboveBlack, EqualToBlack //if necessary } 循环中的- 69for偏移量是怎么回事;我猜这些不在问题的范围内。但是我假设偏移是为了补偿int y = i + 35averagesOriginal没有排列元素。如果resultingsaveragesOriginal[N]应该代表点resultings[N]处两条线的图表上的Y坐标,那么我建议您修复循环索引,以便它们匹配。