Beispiel #1
0
        private static SurveyPointTransformer GetTransformer(SurveyDescriptor descriptor)
        {
            var ellipsoid = descriptor.FittingEllipsoid;
            var hardIron  = new Vector3D(
                ellipsoid.Center.X,
                ellipsoid.Center.Y,
                ellipsoid.Center.Z);
            var softIron = descriptor.FittingEllipsoid.InverseTransform;

            return(new SurveyPointTransformer(hardIron, softIron));
        }
Beispiel #2
0
        private static SurveyDescriptor GetDescriptor(SurveyPoint[] surveyPoints)
        {
            var fittingAlgorithm = new AlgebraicEllipsoidFittingAlgorithm();
            var pointsToFit      = new Point3D[surveyPoints.Length];

            Parallel.For(0, surveyPoints.Length, i => {
                pointsToFit[i] = surveyPoints[i].CalibrationPoint;
            });
            var fittingEllipsoid = fittingAlgorithm.Fit(pointsToFit);

            if (fittingEllipsoid == null)
            {
                return(null);
            }
            var result = new SurveyDescriptor {
                Radius = new Point3D(
                    fittingEllipsoid.XRadius,
                    fittingEllipsoid.YRadius,
                    fittingEllipsoid.ZRadius),
                Center           = fittingEllipsoid.Center,
                Count            = surveyPoints.Length,
                Sphericity       = fittingEllipsoid.MinRadius / fittingEllipsoid.MaxRadius,
                FittingEllipsoid = fittingEllipsoid
            };
            var totalOnTheSurface = 0;

            for (var i = 0; i < pointsToFit.Length; ++i)
            {
                if (fittingEllipsoid.Contains(pointsToFit[i], SurveyDoubleUtils.Tolerance))
                {
                    ++totalOnTheSurface;
                }
            }
            result.QualityOfFit = 1.0 * totalOnTheSurface / surveyPoints.Length;
            return(result);
        }