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, // }, //}; }
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)); }
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); }