private void getResult(ObservablePoint[] ret, GearedValues <ObservablePoint> shortWave) { if (ret.Length == 4) { t1Ret = (ret[1].X - ret[0].X).ToString("N2") + " ms"; t2Ret = (ret[2].X - ret[1].X).ToString("N2") + " ms"; t3Ret = (ret[3].X - ret[2].X).ToString("N2") + " ms"; t4Ret = (ret[3].X - ret[0].X).ToString("N2") + " ms"; var arr1 = shortWave.Skip((int)(ret[0].X / 300 * 6000)).Take((int)((ret[1].X - ret[0].X) / 300 * 6000)).Select(x => Math.Round(x.Y, 2)); var arr2 = shortWave.Skip((int)(ret[2].X / 300 * 6000)).Take((int)((ret[3].X - ret[2].X) / 300 * 6000)).Select(x => Math.Round(x.Y, 2)); var arr3 = shortWave.Skip((int)(ret[1].X / 300 * 6000)).Take((int)((ret[2].X - ret[1].X) / 300 * 6000)).Select(x => Math.Round(x.Y, 2)); //double r1 = LogNormal.Estimate(arr1).Mean; //double r2 = LogNormal.Estimate(arr2).Mean; //double r3 = LogNormal.Estimate(arr3).Mean; double r1 = GetElevationMode(arr1.ToList()); double r2 = GetElevationMode(arr2.ToList()); //double r3 = GetElevationMode(arr3.ToList()); double r3 = LogNormal.Estimate(arr3).Mean; //var sss = new MathNet.Numerics.Differentiation.NumericalDerivative(20, 2); R1Ret = r1.ToString("N2") + " Ω"; R2Ret = r2.ToString("N2") + " Ω"; R1AndR2Ret = r3.ToString("N2") + " Ω";; } }
private GearedValues <ObservablePoint> CutWave(GearedValues <ObservablePoint> wave, int cutHeaderLever = 400) { GearedValues <ObservablePoint> data = new GearedValues <ObservablePoint>(); data.AddRange(wave.Skip(cutSkip).Take(cutTake)); return(data); }
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); }