docs: @Pure
  	public static Pair<Double,Double> computeLineLineIntersectionFactors(
  			double x1, double y1, double z1, double x2, double y2, double z2,
  			double x3, double y3, double z3, double x4, double y4, double z4) {
  
  		//We compute the 4 vectors P1P2, P3P4, P1P3 and P2P4
  		Vector3f a = new Vector3f(x2 - x1, y2 - y1, z2 - z1); 
  		Vector3f b = new Vector3f(x4 - x3, y4 - y3, z4 - z3); 
  		Vector3f c = new Vector3f(x3 - x1, y3 - y1, z3 - z1); 
  		
  		Vector3D v = a.cross(b);
  		
  		/*System.out.println("a :"+a.toString());
  		System.out.println("b :"+b.toString());
  		System.out.println("c :"+c.toString());
  		System.out.println("v :"+v.toString());*/
  		
  		//If the cross product is zero then the two segments are parallels
  		if (MathUtil.isEpsilonZero(v.lengthSquared())) {
  			return null;
  		}
  
  		//If the determinant det(c,a,b)=c.(a x b)!=0 then the two segment are not colinears
  		if (!MathUtil.isEpsilonZero(c.dot(v))) {
  			return null;
  		}
  
  		double factor1 = FunctionalVector3D.determinant(
  				c.getX(), c.getY(), c.getZ(),
  				b.getX(), b.getY(), b.getZ(),
  				v.getX(), v.getY(), v.getZ()) / v.lengthSquared();
  
  		double factor2 = FunctionalVector3D.determinant(
  				c.getX(), c.getY(), c.getZ(),
  				a.getX(), a.getY(), a.getZ(),
  				v.getX(), v.getY(), v.getZ()) / v.lengthSquared();
  
  		return new Pair<>(new Double(factor1), new Double(factor2));
  	}