Exemple #1
0
        private void DrawWave(GearedValues <ObservablePoint> data)
        {
            var maxf = data.Select(x => x.Y).Max();
            var minf = data.Select(x => x.Y).Min();
            GearedValues <ObservablePoint> tempdata = new GearedValues <ObservablePoint>();

            tempdata.AddRange(data.Select(x =>
            {
                x.Y = maxf - Math.Abs(x.Y - minf);
                return(x);
            }));

            var max     = Math.Round(tempdata.Select(x => x.Y).Max(), 2);
            var min     = Math.Round(tempdata.Select(x => x.Y).Min(), 2);
            var avg     = Math.Round((Math.Abs(max) + Math.Abs(min)) / 5, 2);
            var step    = Math.Ceiling(Math.Abs(min) / avg);
            var stepmax = Math.Ceiling(Math.Abs(max) / avg);

            min            = min >= 0 ? (avg * step) : (-1 * avg * step);
            max            = max >= 0 ? (avg * stepmax) : (-1 * avg * stepmax);
            maxVal         = max;
            minVal         = min;
            Yaxis.MaxValue = max;
            Yaxis.MinValue = min;
            XFormatter     = val => (val).ToString() + "ms";
            YFormatter     = val =>
            {
                return(Math.Round((max - Math.Abs(val - min)), 1).ToString() + "Ω");
            };

            YaxisSpe.Step = Math.Abs(avg);
            series        = new SeriesCollection();
            series.Add(new GLineSeries
            {
                StrokeThickness   = 2,
                Stroke            = new SolidColorBrush(System.Windows.Media.Color.FromRgb(28, 142, 196)),
                Fill              = System.Windows.Media.Brushes.Transparent,
                LineSmoothness    = 10,//0为折现样式
                PointGeometrySize = 0,
                PointForeground   = new SolidColorBrush(System.Windows.Media.Color.FromRgb(34, 46, 49)),
                Values            = tempdata
            });
            chart_wave.Series = series;

            //Yaxis.Sections = new SectionsCollection {
            //     new AxisSection
            //        {
            //            Value = maxVal-Math.Abs(minVal),
            //             Stroke = Brushes.Red,
            //            StrokeThickness = 1.5,
            //        },

            //};
        }
Exemple #2
0
        private Tuple <int, int> CutWave(GearedValues <ObservablePoint> wave, int cutHeaderLever = 400)
        {
            double needSelectData = Math.Round((wave.Select(x => x.Y).Max() + wave.Select(x => x.Y).Min()) / 2, 3);

            ObservablePoint[] twopoint = new ObservablePoint[2];
            double[]          tempD    = wave.Select(x => Math.Round(x.Y, 3)).ToArray();
            double            Xmin     = 0.00;
            double            Xmax     = 300.00;

            for (int i = 1; i < 6000; i++)
            {
                if ((tempD[i - 1] >= needSelectData && tempD[i] <= needSelectData) || (tempD[i] >= needSelectData && tempD[i - 1] <= needSelectData))
                {
                    twopoint[0] = wave[i];
                    Xmin        = wave[i].X;
                    break;
                }
            }
            for (int i = 5999; i > 1; i--)
            {
                if ((tempD[i - 1] >= needSelectData && tempD[i] <= needSelectData) || (tempD[i] >= needSelectData && tempD[i - 1] <= needSelectData))
                {
                    Xmax = wave[i].X;
                    break;
                }
            }


            int skip = 0;
            int take = 0;

            if (Xmin < 20)
            {
                skip = 0;
            }
            else
            {
                skip = (int)(Xmin * 20 - cutHeaderLever);
            }

            if (Xmax > 280)
            {
                take = (int)((300 - Xmin) * 20);
            }
            else
            {
                take = (int)((Xmax - Xmin) * 20 + cutHeaderLever);
            }

            return(new Tuple <int, int>(skip, take));
        }
Exemple #3
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);
        }