docs: public boolean process(PairLineNorm line0, PairLineNorm line1) {
  
  		// Find plane equations of second lines in the first view
  		double a0 = GeometryMath_F64.dot(e2,line0.l2);
  		double a1 = GeometryMath_F64.dot(e2,line1.l2);
  
  		GeometryMath_F64.multTran(A,line0.l2,Al0);
  		GeometryMath_F64.multTran(A,line1.l2,Al1);
  
  		// find the intersection of the planes created by each view of each line
  		// first line
  		planeA.set( line0.l1.x , line0.l1.y , line0.l1.z , 0 );
  		planeB.set( Al0.x , Al0.y , Al0.z , a0 );
  
  		if( !Intersection3D_F64.intersect(planeA,planeB,intersect0) )
  			return false;
  		intersect0.slope.normalize(); // maybe this will reduce overflow problems?
  
  		// second line
  		planeA.set( line1.l1.x , line1.l1.y , line1.l1.z , 0 );
  		planeB.set( Al1.x , Al1.y , Al1.z , a1 );
  
  		if( !Intersection3D_F64.intersect(planeA,planeB,intersect1) )
  			return false;
  
  		intersect1.slope.normalize();
  
  		// compute the plane defined by these two lines
  		from0to1.x = intersect1.p.x - intersect0.p.x;
  		from0to1.y = intersect1.p.y - intersect0.p.y;
  		from0to1.z = intersect1.p.z - intersect0.p.z;
  
  		// the plane's normal will be the cross product of one of the slopes and a line connecting the two lines
  		GeometryMath_F64.cross(intersect0.slope,from0to1,pi.n);
  		pi.p.set(intersect0.p);
  
  		// convert this plane description into general format
  		UtilPlane3D_F64.convert(pi,pi_gen);
  
  		v.set(pi_gen.A/pi_gen.D,pi_gen.B/pi_gen.D,pi_gen.C/pi_gen.D);
  
  		// H = A - e2*v^T
  		GeometryMath_F64.outerProd(e2,v,av);
  		CommonOps_DDRM.subtract(A, av, H);
  
  		// pick a good scale and sign for H
  		adjust.adjust(H, line0);
  
  		return true;
  	}