Пример #1
0
        private void DrawFourLine(GearedValues <ObservablePoint> schart, GearedValues <ObservablePoint> sundata)
        {
            double needSelectData = Math.Round((sundata.Select(x => x.Y).Max() + sundata.Select(x => x.Y).Min()) / 2, 3);

            ObservablePoint[] twopoint = new ObservablePoint[4];
            double[]          tempD    = sundata.Select(x => Math.Round(x.Y, 3)).ToArray();
            for (int i = 1; i < 6000; i++)
            {
                if ((tempD[i - 1] >= needSelectData && tempD[i] <= needSelectData) || (tempD[i] >= needSelectData && tempD[i - 1] <= needSelectData))
                {
                    twopoint[0] = sundata[i];
                    break;
                }
            }
            for (int i = 5999; i > 1; i--)
            {
                if ((tempD[i - 1] >= needSelectData && tempD[i] <= needSelectData) || (tempD[i] >= needSelectData && tempD[i - 1] <= needSelectData))
                {
                    twopoint[3] = sundata[i];
                    break;
                }
            }


            double cuttime  = cutTake * 0.05;
            double skiptime = cutSkip * 0.05;

            //绘制t1
            Hover1.X1 = (twopoint[0].X - skiptime) / cuttime * chartCore.Width + chartCore.Left + 5;
            Hover1.X2 = (twopoint[0].X - skiptime) / cuttime * chartCore.Width + chartCore.Left + 5;
            t1.Text   = "t₁";
            Canvas.SetLeft(t1, Hover1.X1 - 5);
            Canvas.SetBottom(t1, 5);

            Hover4.X1 = (twopoint[3].X - skiptime) / cuttime * chartCore.Width + chartCore.Left + 5;
            Hover4.X2 = (twopoint[3].X - skiptime) / cuttime * chartCore.Width + chartCore.Left + 5;
            t4.Text   = "t₄";
            Canvas.SetLeft(t4, Hover4.X1 - 5);
            Canvas.SetBottom(t4, 5);


            int oneStart  = (int)((twopoint[0].X) / 300 * sumChart.Count());
            int fourStart = (int)((twopoint[3].X) / 300 * sumChart.Count());

            var centerPoints = schart.Skip(oneStart + (fourStart - oneStart) / 4).Take((fourStart - oneStart) / 2);

            int startI = oneStart + (fourStart - oneStart) / 4;

            var centerValue = (centerPoints.Select(x => x.Y).Max() + centerPoints.Select(x => x.Y).Min()) / 2;

            double[] centDoble = centerPoints.Select(x => Math.Round(x.Y, 3)).ToArray();
            for (int i = 1; i < centDoble.Length; i++)
            {
                if ((centDoble[i - 1] >= centerValue && centDoble[i] <= centerValue) || (centDoble[i] >= centerValue && centDoble[i - 1] <= centerValue))
                {
                    twopoint[1] = sundata[i + startI];
                    break;
                }
            }
            for (int i = centDoble.Length - 1; i > 1; i--)
            {
                if ((centDoble[i - 1] >= centerValue && centDoble[i] <= centerValue) || (centDoble[i] >= centerValue && centDoble[i - 1] <= centerValue))
                {
                    twopoint[2] = sundata[i + startI];
                    break;
                }
            }



            Hover2.X1 = (twopoint[1].X - skiptime) / cuttime * chartCore.Width + chartCore.Left + 5;
            Hover2.X2 = (twopoint[1].X - skiptime) / cuttime * chartCore.Width + chartCore.Left + 5;
            t2.Text   = "t₂";
            Canvas.SetLeft(t2, Hover2.X1 - 5);
            Canvas.SetBottom(t2, 5);

            Hover3.X1 = (twopoint[2].X - skiptime) / cuttime * chartCore.Width + chartCore.Left + 5;
            Hover3.X2 = (twopoint[2].X - skiptime) / cuttime * chartCore.Width + chartCore.Left + 5;
            t3.Text   = "t₃";
            Canvas.SetLeft(t3, Hover3.X1 - 5);
            Canvas.SetBottom(t3, 5);

            initLine();

            getResult(twopoint, sundata);
        }