code: protected int addConics(List<AssociatedPairConic> points , DMatrixRMaj A, int rows ) {
  
  		if( exhaustiveConics ) {
  			// adds an exhaustive set of linear conics
  			for (int i = 0; i < points.size(); i++) {
  				for (int j = i+1; j < points.size(); j++) {
  					rows = addConicPairConstraints(points.get(i),points.get(j),A,rows);
  				}
  			}
  		} else {
  			// adds pairs and has linear time complexity
  			for (int i = 1; i < points.size(); i++) {
  				rows = addConicPairConstraints(points.get(i-1),points.get(i),A,rows);
  			}
  			int N = points.size();
  			rows = addConicPairConstraints(points.get(0),points.get(N-1),A,rows);
  		}
  
  		return rows;
  	}
docs: <p>Adds the 9x9 matrix constraint for each pair of conics.  To avoid O(N^2) growth the default option only
  adds O(N) pairs. if only conics are used then a minimum of 3 is required. See [2].</p>
  
  inv(C[1]')*(C[2]')*H - H*invC[1]*C[2] == 0
  
  Note: x' = H*x. C' is conic from the same view as x' and C from x. It can be shown that C = H^T*C'*H