diff --git a/src/Mod/Mesh/App/Core/Approximation.cpp b/src/Mod/Mesh/App/Core/Approximation.cpp index 0411d1e0fd..f811f32f62 100644 --- a/src/Mod/Mesh/App/Core/Approximation.cpp +++ b/src/Mod/Mesh/App/Core/Approximation.cpp @@ -301,7 +301,7 @@ float PlaneFit::GetDistanceToPlane(const Base::Vector3f &rcPoint) const float PlaneFit::GetStdDeviation() const { // Mean: M=(1/N)*SUM Xi - // Variance: VAR=(N/N-3)*[(1/N)*SUM(Xi^2)-M^2] + // Variance: VAR=(N/N-1)*[(1/N)*SUM(Xi^2)-M^2] // Standard deviation: SD=SQRT(VAR) // Standard error of the mean: SE=SD/SQRT(N) if (!_bIsFitted) @@ -320,7 +320,7 @@ float PlaneFit::GetStdDeviation() const } fMean = (1.0f / ulPtCt) * fSumXi; - return sqrt((ulPtCt / (ulPtCt - 3.0f)) * ((1.0f / ulPtCt) * fSumXi2 - fMean * fMean)); + return sqrt((ulPtCt / (ulPtCt - 1.0f)) * ((1.0f / ulPtCt) * fSumXi2 - fMean * fMean)); } float PlaneFit::GetSignedStdDeviation() const @@ -1086,6 +1086,7 @@ float CylinderFit::Fit() cylFit.AddPoints(_vPoints); //cylFit.SetApproximations(_fRadius, Base::Vector3d(_vBase.x, _vBase.y, _vBase.z), Base::Vector3d(_vAxis.x, _vAxis.y, _vAxis.z)); + // Do the cylinder fit float result = cylFit.Fit(); if (result < FLOAT_MAX) { Base::Vector3d base = cylFit.GetBase(); @@ -1184,7 +1185,7 @@ float CylinderFit::GetDistanceToCylinder(const Base::Vector3f &rcPoint) const float CylinderFit::GetStdDeviation() const { // Mean: M=(1/N)*SUM Xi - // Variance: VAR=(N/N-3)*[(1/N)*SUM(Xi^2)-M^2] + // Variance: VAR=(N/N-1)*[(1/N)*SUM(Xi^2)-M^2] // Standard deviation: SD=SQRT(VAR) // Standard error of the mean: SE=SD/SQRT(N) if (!_bIsFitted) @@ -1203,7 +1204,7 @@ float CylinderFit::GetStdDeviation() const } fMean = (1.0f / ulPtCt) * fSumXi; - return sqrt((ulPtCt / (ulPtCt - 3.0f)) * ((1.0f / ulPtCt) * fSumXi2 - fMean * fMean)); + return sqrt((ulPtCt / (ulPtCt - 1.0f)) * ((1.0f / ulPtCt) * fSumXi2 - fMean * fMean)); } void CylinderFit::GetBounding(Base::Vector3f& bottom, Base::Vector3f& top) const @@ -1346,7 +1347,7 @@ float SphereFit::GetDistanceToSphere(const Base::Vector3f& rcPoint) const float SphereFit::GetStdDeviation() const { // Mean: M=(1/N)*SUM Xi - // Variance: VAR=(N/N-3)*[(1/N)*SUM(Xi^2)-M^2] + // Variance: VAR=(N/N-1)*[(1/N)*SUM(Xi^2)-M^2] // Standard deviation: SD=SQRT(VAR) // Standard error of the mean: SE=SD/SQRT(N) if (!_bIsFitted) @@ -1365,7 +1366,7 @@ float SphereFit::GetStdDeviation() const } fMean = (1.0f / ulPtCt) * fSumXi; - return sqrt((ulPtCt / (ulPtCt - 3.0f)) * ((1.0f / ulPtCt) * fSumXi2 - fMean * fMean)); + return sqrt((ulPtCt / (ulPtCt - 1.0f)) * ((1.0f / ulPtCt) * fSumXi2 - fMean * fMean)); } void SphereFit::ProjectToSphere() diff --git a/src/Mod/Mesh/App/Core/CylinderFit.cpp b/src/Mod/Mesh/App/Core/CylinderFit.cpp index 3cd2fa770a..89fe587851 100644 --- a/src/Mod/Mesh/App/Core/CylinderFit.cpp +++ b/src/Mod/Mesh/App/Core/CylinderFit.cpp @@ -154,7 +154,7 @@ float CylinderFit::GetDistanceToCylinder(const Base::Vector3f &rcPoint) const float CylinderFit::GetStdDeviation() const { // Mean: M=(1/N)*SUM Xi - // Variance: VAR=(N/N-3)*[(1/N)*SUM(Xi^2)-M^2] + // Variance: VAR=(N/N-1)*[(1/N)*SUM(Xi^2)-M^2] // Standard deviation: SD=SQRT(VAR) // Standard error of the mean: SE=SD/SQRT(N) if (!_bIsFitted) @@ -173,7 +173,7 @@ float CylinderFit::GetStdDeviation() const } fMean = (1.0f / ulPtCt) * fSumXi; - return sqrt((ulPtCt / (ulPtCt - 3.0f)) * ((1.0f / ulPtCt) * fSumXi2 - fMean * fMean)); + return sqrt((ulPtCt / (ulPtCt - 1.0f)) * ((1.0f / ulPtCt) * fSumXi2 - fMean * fMean)); } void CylinderFit::ProjectToCylinder() diff --git a/src/Mod/Mesh/App/Core/SphereFit.cpp b/src/Mod/Mesh/App/Core/SphereFit.cpp index 5285c69d1f..c3b64ed018 100644 --- a/src/Mod/Mesh/App/Core/SphereFit.cpp +++ b/src/Mod/Mesh/App/Core/SphereFit.cpp @@ -107,7 +107,7 @@ float SphereFit::GetDistanceToSphere(const Base::Vector3f &rcPoint) const float SphereFit::GetStdDeviation() const { // Mean: M=(1/N)*SUM Xi - // Variance: VAR=(N/N-3)*[(1/N)*SUM(Xi^2)-M^2] + // Variance: VAR=(N/N-1)*[(1/N)*SUM(Xi^2)-M^2] // Standard deviation: SD=SQRT(VAR) // Standard error of the mean: SE=SD/SQRT(N) if (!_bIsFitted) @@ -126,7 +126,7 @@ float SphereFit::GetStdDeviation() const } fMean = (1.0f / ulPtCt) * fSumXi; - return sqrt((ulPtCt / (ulPtCt - 3.0f)) * ((1.0f / ulPtCt) * fSumXi2 - fMean * fMean)); + return sqrt((ulPtCt / (ulPtCt - 1.0f)) * ((1.0f / ulPtCt) * fSumXi2 - fMean * fMean)); } void SphereFit::ProjectToSphere()