Ejemplo n.º 1
0
        private Func <double, double> GetFunc(ICylData points)
        {
            try
            {
                double[] x = new double[points.Count];
                double[] y = new double[points.Count];

                for (int i = 0; i < points.Count; i++)
                {
                    var pt = points[i];
                    x[i] = pt.ThetaRad;
                    y[i] = pt.R;
                }
                if (_polyOrder > 1)
                {
                    return(MathNet.Numerics.Fit.PolynomialFunc(x, y, _polyOrder));
                }
                else
                {
                    return(MathNet.Numerics.Fit.LineFunc(x, y));
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
Ejemplo n.º 2
0
        public void CalcFitCoeffs(ICylData points)
        {
            try
            {
                if (points.Count <= _polyOrder)
                {
                    _polyOrder = points.Count - 1;
                }

                if (_segmentFit)
                {
                    for (int i = 0; i < points.Count - 1; i++)
                    {
                        var segment = new CylData(points.FileName);
                        var p1      = points[i];
                        var p2      = points[i + 1];
                        segment.Add(p1);
                        segment.Add(p2);
                        var func   = GetFunc(segment);
                        var segFit = new SegmentFitData()
                        {
                            StartPoint  = p1,
                            EndPoint    = p2,
                            FitFunction = func
                        };
                        dataSegments.Add(segFit);
                    }
                }
                else
                {
                    var func   = GetFunc(points);
                    var segFit = new SegmentFitData()
                    {
                        StartPoint  = points[0],
                        EndPoint    = points[points.Count - 1],
                        FitFunction = func
                    };
                    dataSegments.Add(segFit);
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
Ejemplo n.º 3
0
        public ICylData CorrectData(ICylData points)
        {
            try
            {
                var result = new CylData(points.FileName);
                points.SortByTheta();
                for (int i = 0; i < points.Count; i++)
                {
                    var inputPoint = points[i];
                    if (_segmentFit)
                    {
                        foreach (SegmentFitData segment in dataSegments)
                        {
                            if (inputPoint.ThetaRad >= segment.StartPoint.ThetaRad && inputPoint.ThetaRad < segment.EndPoint.ThetaRad)
                            {
                                double r  = inputPoint.R - segment.FitFunction(inputPoint.ThetaRad);
                                var    pt = new PointCyl(r, inputPoint.ThetaRad, inputPoint.Z);
                                result.Add(pt);
                                break;
                            }
                        }
                    }
                    else
                    {
                        double r  = inputPoint.R - dataSegments[0].FitFunction(inputPoint.ThetaRad);
                        var    pt = new PointCyl(r, inputPoint.ThetaRad, inputPoint.Z);
                        result.Add(pt);
                    }
                }

                return(result);
            }
            catch (Exception)
            {
                throw;
            }
        }
Ejemplo n.º 4
0
 public bool Remove(ICylData item)
 {
     return(data.Remove(item));
 }
Ejemplo n.º 5
0
 public bool Contains(ICylData item)
 {
     return(data.Contains(item));
 }
Ejemplo n.º 6
0
 public void Add(ICylData item)
 {
     data.Add(item);
 }
Ejemplo n.º 7
0
 public void Insert(int index, ICylData item)
 {
     data.Insert(index, item);
 }
Ejemplo n.º 8
0
 public int IndexOf(ICylData item)
 {
     return(data.IndexOf(item));
 }
Ejemplo n.º 9
0
 public CylDataEnumerator(ICylData collection)
 {
     _collection = collection;
     curIndex    = -1;
     currentItem = default;
 }