private void SetCurrentPrimitiveFittingModel(IEnumerable <GeoData> previous, GeoData current, ProviderState state) { if (previous == null) { throw new ArgumentNullException("previous"); } if (current == null) { throw new ArgumentNullException("current"); } if (state == null) { throw new ArgumentNullException("state"); } state.LineData = new Line3DData(previous.Count()); state.CircleData = new Circle3DData(); Matrix <double> gpsCoordinates = ConvertPositionBufferToCartesianMatrix(previous, current, state); if (!PrimitivesFitting.ValidateDispersion(gpsCoordinates, DispersionRatio)) { return; } if (state.LineData.ResidualsNorm > CircleFitting) { state.CircleData = PrimitivesFitting.Ls3DCircle(gpsCoordinates); } else { state.LineData = PrimitivesFitting.Ls3Dline(gpsCoordinates); } SetAltitudeEstimation(previous, current, state); state.LastRealPositionTime = previous.Last().PositionData.Utc; state.EstimateCpt = 0; }