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");
                    }
                }
            }

平均值原始列表显示图表中的红线,结果列表显示黑线。我需要找到红线开始爬上黑线的地方。我附上了一张显示红线和黑线的图表图像,并用黑色圆圈标记了我认为应该是它开始的地方。

我认为左边的两个小球应该是红线开始爬上黑线的地方。

我需要找到图表中所有位置的索引(以及每个索引中的数字),从这些位置开始将红色爬上黑色。

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

它应该是两个索引。

条件应该是:第一个索引是红色在黑色下方的位置,然后在下一个单个索引向前它应该在黑色上方。

如果您查看开头的图表,则红色始终位于黑色下方。我需要以某种方式找到红色在黑色下方的位置,并且在下一个单一索引中红色在黑色上方。这意味着红色开始攀升。

那么我该如何根据我的代码来做呢?

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

在此处输入图像描述

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 回答