int Line::intersect(std::list<Kernel::V3D> &PntOut, const Sphere &Sph) const /** For the line that intersects the cylinder generate add the point to the VecOut, return number of points added. It does not check the points for validity. @param PntOut :: Vector of points found by the line/sphere intersection @param Sph :: Sphere to intersect line with @return Number of points found by intersection */ { // Nasty stripping of useful stuff from sphere const Kernel::V3D Ax = Origin - Sph.getCentre(); const double R = Sph.getRadius(); // First solve the equation of intersection double C[3]; C[0] = 1; C[1] = 2.0 * Ax.scalar_prod(Direct); C[2] = Ax.scalar_prod(Ax) - R * R; std::pair<std::complex<double>, std::complex<double>> SQ; const int ix = solveQuadratic(C, SQ); return lambdaPair(ix, SQ, PntOut); }