docs: void triangulateStereoEdges(Motion edge ) {
  		View viewA = edge.viewSrc;
  		View viewB = edge.viewDst;
  
  		triangulationError.configure(viewA.camera.pinhole,viewB.camera.pinhole);
  
  		for (int i = 0; i < edge.associated.size(); i++) {
  			AssociatedIndex f = edge.associated.get(i);
  
  			Point2D_F64 normA = viewA.observationNorm.get(f.src);
  			Point2D_F64 normB = viewB.observationNorm.get(f.dst);
  
  			double angle = triangulationAngle(normA,normB,edge.a_to_b);
  			if( angle < TRIANGULATE_MIN_ANGLE )
  				continue;
  
  			Feature3D feature3D = new Feature3D();
  
  			if( !triangulate.triangulate(normA,normB,edge.a_to_b,feature3D.worldPt) ) {
  				continue;
  			}
  
  			// must be in front of the camera
  			if( feature3D.worldPt.z <= 0 )
  				continue;
  
  			// can't have an excessively large reprojection error either
  			double error = triangulationError.process(normA,normB,edge.a_to_b,feature3D.worldPt);
  			if( error > maxPixelError*maxPixelError )
  				continue;
  
  			feature3D.views.add(viewA);
  			feature3D.views.add(viewB);
  			feature3D.obsIdx.add(f.src);
  			feature3D.obsIdx.add(f.dst);
  			feature3D.triangulationAngle = angle;
  
  			edge.stereoTriangulations.add(feature3D);
  		}
  	}