docs: private void setupA( List<DMatrixRMaj> homographies ) {
  		A.reshape(2*homographies.size(),6, false);
  
  		DMatrixRMaj h1 = new DMatrixRMaj(3,1);
  		DMatrixRMaj h2 = new DMatrixRMaj(3,1);
  
  		DMatrixRMaj v12 = new DMatrixRMaj(1,6);
  		DMatrixRMaj v11 = new DMatrixRMaj(1,6);
  		DMatrixRMaj v22 = new DMatrixRMaj(1,6);
  
  		DMatrixRMaj v11m22 = new DMatrixRMaj(1,6);
  
  		for( int i = 0; i < homographies.size(); i++ ) {
  			DMatrixRMaj H = homographies.get(i);
  
  			CommonOps_DDRM.extract(H,0,3,0,1,h1,0,0);
  			CommonOps_DDRM.extract(H,0,3,1,2,h2,0,0);
  
  			// normalize H by the max value to reduce numerical error when computing A
  			// several numbers are multiplied against each other and could become quite large/small
  			double max1 = CommonOps_DDRM.elementMaxAbs(h1);
  			double max2 = CommonOps_DDRM.elementMaxAbs(h2);
  			double max = Math.max(max1,max2);
  
  			CommonOps_DDRM.divide(h1,max);
  			CommonOps_DDRM.divide(h2,max);
  
  			// compute elements of A
  			computeV(h1, h2, v12);
  			computeV(h1, h1, v11);
  			computeV(h2, h2, v22);
  
  			CommonOps_DDRM.subtract(v11, v22, v11m22);
  
  			CommonOps_DDRM.insert( v12    , A, i*2   , 0);
  			CommonOps_DDRM.insert( v11m22 , A, i*2+1 , 0);
  		}
  	}