/// <summary> /// Calculate point on spline value /// Candidate point(X, Y): /// Y will be calculated by X if SplineKind is OriginalXY, /// or X will be calculated by Y if SplineKind is ReversedXY /// </summary> /// <param name="p">candidate point </param> /// <returns></returns> public OxyPlot.DataPoint CalcXorY(GPoint p) { int n = m_x.Count; // find the closest point m_x[idx] < x, idx=0 even if x<m_x[0] //std::vector<double>::const_iterator it; //it = std::lower_bound(m_x.begin(), m_x.end(), x); //int idx = std::max(int(it - m_x.begin()) - 1, 0); double x = (SplineKind() == SplineType.OriginalXY) ? p.X : p.Y; int idx = LowerBound(m_x, x); double h = x - m_x[idx]; double interpol; if (x < m_x[0]) { // extrapolation to the left interpol = (m_b0 * h + m_c0) * h + m_y[0]; } else if (x > m_x[n - 1]) { // extrapolation to the right interpol = (m_b[n - 1] * h + m_c[n - 1]) * h + m_y[n - 1]; } else { // interpolation interpol = ((m_a[idx] * h + m_b[idx]) * h + m_c[idx]) * h + m_y[idx]; } OxyPlot.DataPoint spline_point = (SplineKind() == SplineType.OriginalXY) ? new OxyPlot.DataPoint(x, interpol) : new OxyPlot.DataPoint(interpol, x); return(spline_point); }
public DataPoint(Double[] values) { if (values.Length != 2) { throw new ArgumentException("Specify two numbers to create a DataPoint object"); } Value = new OxyPlot.DataPoint(values[0], values[1]); }
public void SetDataRange(int length, double minX, double maxX, double minY, double maxY) { Series.Points.Clear(); for (var i = 0; i < length; i++) { var point = new OxyPlot.DataPoint((maxX - minX) * i / length + minX, 0); Series.Points.Add(point); } Series.YAxis.Minimum = minY; Series.YAxis.Maximum = maxY; }
/// <summary> /// Формирует DataMass для следующих методов: GetLineSeriesList, GetFunctionSeriesList. /// </summary> protected void GetDataMass() { DataMass = new OxyPlot.DataPoint[PtsList.Count][]; string action; for (int i = 0, j = 0; i < Actions.Count; i++, j++) { action = Actions[i].ToUpper(); if (action.Contains("ARC")) { action = "ARC"; } switch (action) { case "LINE": DataMass[i] = new OxyPlot.DataPoint[2]; if (j != PtsList.Count - 1) { DataMass[i][0] = PtsList[j]; DataMass[i][1] = PtsList[j + 1]; } else { DataMass[i][0] = PtsList[j]; DataMass[i][1] = PtsList[0]; } break; case "ARC": DataMass[i] = new OxyPlot.DataPoint[3]; if (j != PtsList.Count - 2) { DataMass[i][0] = PtsList[j]; DataMass[i][1] = PtsList[j + 1]; DataMass[i][2] = PtsList[j + 2]; } else { DataMass[i][0] = PtsList[j]; DataMass[i][1] = PtsList[j + 1]; DataMass[i][2] = PtsList[0]; } j++; break; default: break; } } }
private void ExecuteButton_Click(object sender, RoutedEventArgs e) { var sw = new System.Diagnostics.Stopwatch(); sw.Start(); Cursor = Cursors.Wait; ExecuteButton.IsEnabled = false; var geometry = GetGeometry(); var results = geometry.GetDistribution(); var r1 = results[results.Count / 100]; var datas1 = new List <OxyPlot.DataPoint>(); for (var i = 0; i < r1.Length; i++) { var point = new OxyPlot.DataPoint(i * geometry.Resolution, r1[i]); datas1.Add(point); } var r2 = results[results.Count / 10]; var datas2 = new List <OxyPlot.DataPoint>(); for (var i = 0; i < r2.Length; i++) { var point = new OxyPlot.DataPoint(i * geometry.Resolution, r2[i]); datas2.Add(point); } var r3 = results.Last(); var datas3 = new List <OxyPlot.DataPoint>(); for (var i = 0; i < r2.Length; i++) { var point = new OxyPlot.DataPoint(i * geometry.Resolution, r3[i]); datas3.Add(point); } DistributionPlot.Series[0].ItemsSource = datas1; DistributionPlot.Series[1].ItemsSource = datas2; DistributionPlot.Series[2].ItemsSource = datas3; DistributionPlot.Axes[0].Maximum = ((CylinderReflector)geometry.Structures[0]).Length; DistributionPlot.Axes[1].Maximum = r3.Max(); ExecuteButton.IsEnabled = true; Cursor = Cursors.Arrow; sw.Stop(); Console.WriteLine(sw.Elapsed.TotalSeconds.ToString() + "m"); }
private void UpdatePlotData() { // take all new packages from the queue _newUnfilteredSamplesBuffer.Clear(); _newFilteredSamplesBuffer.Clear(); PhysioDataPackage package; while (_analysisQueue.TryDequeue(out package)) { for (var i = 0; i < package.Samples.Length; ++i) { package.Samples[i] = (1 << 17) - package.Samples[i]; } _newUnfilteredSamplesBuffer.AddRange(package.Samples); _newFilteredSamplesBuffer.AddRange(package.Samples); } _signalNormalizer.NormalizeDataInPlace(_newFilteredSamplesBuffer); _lpFilter.FilterInPlace(_newFilteredSamplesBuffer); WriteSamples(_fileWriter, _newFilteredSamplesBuffer, _newUnfilteredSamplesBuffer); // find out which samples must be visible var visibleUnfilteredSamples = GetVisibleSamplesAndCache(_newUnfilteredSamplesBuffer, _visibleUnfilteredSamples); var visibleFilteredSamples = GetVisibleSamplesAndCache(_newFilteredSamplesBuffer, _visibleFilteredSamples); var count = visibleUnfilteredSamples.Count; var filteredPoints = new OxyPlot.DataPoint[count]; var unfilteredPoints = new OxyPlot.DataPoint[count]; for (var c = 0; c < count; ++c) { var time = c * 1.0 / SamplingRate; var value = visibleUnfilteredSamples[c]; var filteredValue = visibleFilteredSamples[c]; unfilteredPoints[c] = new OxyPlot.DataPoint(time, value); filteredPoints[c] = new OxyPlot.DataPoint(time, filteredValue); } _unfilteredSeries.Points.Clear(); _unfilteredSeries.Points.AddRange(unfilteredPoints); _filteredSeries.Points.Clear(); _filteredSeries.Points.AddRange(filteredPoints); plotView1.InvalidatePlot(true); }
public DataPoint() { Value = new OxyPlot.DataPoint(); }
/// <summary> /// Вращает точку на плоскости /// </summary> /// <param name="point">Вращаемая точка</param> /// <param name="basePoint">Центр вращения</param> /// <param name="angle">Угол вращения в градусах</param> public OxyPlot.DataPoint RotatePoint(OxyPlot.DataPoint point, OxyPlot.DataPoint basePoint, double angle) { angle = angle * Math.PI / 180; return(new OxyPlot.DataPoint((point.X - basePoint.X) * Math.Cos(angle) - (point.Y - basePoint.Y) * Math.Sin(angle) + basePoint.X, (point.X - basePoint.X) * Math.Sin(angle) + (point.Y - basePoint.Y) * Math.Cos(angle) + basePoint.Y)); }
/// <summary> /// Двигает точку на плоскости /// </summary> public OxyPlot.DataPoint MovePoint(OxyPlot.DataPoint point, double X, double Y) { return(new OxyPlot.DataPoint(point.X + X, point.Y + Y)); }