int invertQuadraticPolynomial(SolContainer &sol, Scalar a, Scalar b, Scalar c) { typedef MathToolbox<Scalar> Toolbox; // check for a line if (std::abs(Toolbox::scalarValue(a)) < 1e-30) return invertLinearPolynomial(sol, b, c); // discriminant Scalar Delta = b*b - 4*a*c; if (Delta < 0) return 0; // no real roots Delta = Toolbox::sqrt(Delta); sol[0] = (- b + Delta)/(2*a); sol[1] = (- b - Delta)/(2*a); // sort the result if (sol[0] > sol[1]) std::swap(sol[0], sol[1]); return 2; // two real roots }
int invertQuadraticPolynomial(SolContainer &sol, Scalar a, Scalar b, Scalar c) { // check for a line if (a == 0.0) return invertLinearPolynomial(sol, b, c); // discriminant Scalar Delta = b*b - 4*a*c; if (Delta < 0) return 0; // no real roots Delta = std::sqrt(Delta); sol[0] = (- b + Delta)/(2*a); sol[1] = (- b - Delta)/(2*a); // sort the result if (sol[0] > sol[1]) std::swap(sol[0], sol[1]); return 2; // two real roots }