Unverified Commit 86153a0f authored by Axel Kohlmeyer's avatar Axel Kohlmeyer
Browse files

avoid division by zero in MathExtra normalize functions

parent 2a6546d6
Loading
Loading
Loading
Loading
+21 −12
Original line number Diff line number Diff line
@@ -169,11 +169,14 @@ inline void MathExtra::zero3(double *v)

inline void MathExtra::norm3(double *v)
{
  double scale = 1.0/sqrt(v[0]*v[0]+v[1]*v[1]+v[2]*v[2]);
  const double val = v[0]*v[0]+v[1]*v[1]+v[2]*v[2];
  if (val > 0.0) {
    const double scale = 1.0/sqrt(val);
    v[0] *= scale;
    v[1] *= scale;
    v[2] *= scale;
  }
}

/* ----------------------------------------------------------------------
   normalize a vector, return in ans
@@ -181,11 +184,14 @@ inline void MathExtra::norm3(double *v)

inline void MathExtra::normalize3(const double *v, double *ans)
{
  double scale = 1.0/sqrt(v[0]*v[0]+v[1]*v[1]+v[2]*v[2]);
  const double val = v[0]*v[0]+v[1]*v[1]+v[2]*v[2];
  if (val > 0.0) {
    double scale = 1.0/sqrt(val);
    ans[0] = v[0]*scale;
    ans[1] = v[1]*scale;
    ans[2] = v[2]*scale;
  }
}

/* ----------------------------------------------------------------------
   scale a vector to length
@@ -194,11 +200,14 @@ inline void MathExtra::normalize3(const double *v, double *ans)
inline void MathExtra::snormalize3(const double length, const double *v,
                                   double *ans)
{
  double scale = length/sqrt(v[0]*v[0]+v[1]*v[1]+v[2]*v[2]);
  const double val = v[0]*v[0]+v[1]*v[1]+v[2]*v[2];
  if (val > 0.0) {
    double scale = length/sqrt(val);
    ans[0] = v[0]*scale;
    ans[1] = v[1]*scale;
    ans[2] = v[2]*scale;
  }
}

/* ----------------------------------------------------------------------
   negate vector v