Example #1
0
        /// <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);
        }
Example #2
0
        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]);
        }
Example #3
0
        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;
        }
Example #4
0
        /// <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");
        }
Example #6
0
        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);
        }
Example #7
0
 public DataPoint()
 {
     Value = new OxyPlot.DataPoint();
 }
Example #8
0
 /// <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));
 }
Example #9
0
 /// <summary>
 /// Двигает точку на плоскости
 /// </summary>
 public OxyPlot.DataPoint MovePoint(OxyPlot.DataPoint point, double X, double Y)
 {
     return(new OxyPlot.DataPoint(point.X + X, point.Y + Y));
 }