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