docs: public boolean estimatePlaneAtInfinity( DMatrixRMaj P2 , Vector3D_F64 v ) {
  		PerspectiveOps.projectionSplit(P2,Q2,q2);
  
  		// inv(K2)*(Q2*K1 + q2*v')
  		CommonOps_DDF3.mult(K2_inv,q2,t2);
  		CommonOps_DDF3.mult(K2_inv,Q2,tmpA);
  		CommonOps_DDF3.mult(tmpA,K1,tmpB);
  
  		// Find the rotation matrix R*t2 = [||t2||,0,0]^T
  		computeRotation(t2,RR);
  
  		// Compute W
  		CommonOps_DDF3.mult(RR,tmpB,W);
  
  		// Compute v, the plane at infinity
  		// v = (w2 cross w3 / ||w3|| - w1 ) / ||t2||
  		w2.set(W.a21,W.a22,W.a23);
  		w3.set(W.a31,W.a32,W.a33);
  		double n3 = w3.norm();
  		v.cross(w2,w3); // approximation here, w2 and w3 might not be orthogonal
  		v.divideIP(n3);
  		v.x -= W.a11;
  		v.y -= W.a12;
  		v.z -= W.a13;
  		v.divideIP(t2.a1);
  
  		// really just a sanity check for bad input
  		return !(UtilEjml.isUncountable(v.x) || UtilEjml.isUncountable(v.y) || UtilEjml.isUncountable(v.z));
  	}