docs: public static Point3D_F64 transfer_1_to_3(TrifocalTensor T , Point2D_F64 x1 , Vector3D_F64 l2 ,
  											  @Nullable Point3D_F64 x3 )
  	{
  		if( x3 == null )
  			x3 = new Point3D_F64();
  
  		GeometryMath_F64.multTran(T.T1,l2,x3);
  		// storage solution here to avoid the need to declare a temporary variable
  		double xx = x3.x * x1.x;
  		double yy = x3.y * x1.x;
  		double zz = x3.z * x1.x;
  		GeometryMath_F64.multTran(T.T2,l2,x3);
  		xx += x3.x * x1.y;
  		yy += x3.y * x1.y;
  		zz += x3.z * x1.y;
  		GeometryMath_F64.multTran(T.T3,l2,x3);
  		x3.x = xx + x3.x;
  		x3.y = yy + x3.y;
  		x3.z = zz + x3.z;
  
  		return x3;
  		// Commented out code is closer to tensor notation. The above was derived from it
  //		for (int i = 0; i < 3; i++) {
  //			DMatrixRMaj t = T.T1;
  //
  //			double vx;
  //			switch( i ) {
  //				case 0: vx = x.x; break;
  //				case 1: vx = x.y; break;
  //				case 2: vx = 1; break;
  //				default: throw new RuntimeException("Egads");
  //			}
  
  //			sumX += vx*(l.x*t.get(0,0)+l.y*t.get(1,0)+l.z*t.get(2,0));
  //			sumY += vx*(l.x*t.get(0,1)+l.y*t.get(1,1)+l.z*t.get(2,1));
  //			sumZ += vx*(l.x*t.get(0,2)+l.y*t.get(1,2)+l.z*t.get(2,2));
  //		}
  	}