docs: static boolean multiPointRelatePoint_(MultiPoint multipoint_a,
  			Point point_b, double tolerance, String scl,
  			ProgressTracker progress_tracker) {
  		RelationalOperationsMatrix relOps = new RelationalOperationsMatrix();
  		relOps.resetMatrix_();
  		relOps.setPredicates_(scl);
  		relOps.setPointPointPredicates_();
  
  		Envelope2D env_a = new Envelope2D();
  		multipoint_a.queryEnvelope2D(env_a);
  		Point2D pt_b = point_b.getXY();
  
  		boolean bRelationKnown = false;
  		boolean b_disjoint = RelationalOperations.pointDisjointEnvelope_(pt_b,
  				env_a, tolerance, progress_tracker);
  
  		if (b_disjoint) {
  			relOps.pointPointDisjointPredicates_();
  			bRelationKnown = true;
  		}
  
  		if (!bRelationKnown) {
  			boolean b_intersects = false;
  			boolean b_multipoint_contained = true;
  			double tolerance_sq = tolerance * tolerance;
  
  			for (int i = 0; i < multipoint_a.getPointCount(); i++) {
  				Point2D pt_a = multipoint_a.getXY(i);
  
  				if (Point2D.sqrDistance(pt_a, pt_b) <= tolerance_sq)
  					b_intersects = true;
  				else
  					b_multipoint_contained = false;
  
  				if (b_intersects && !b_multipoint_contained)
  					break;
  			}
  
  			if (b_intersects) {
  				relOps.m_matrix[MatrixPredicate.InteriorInterior] = 0;
  
  				if (!b_multipoint_contained)
  					relOps.m_matrix[MatrixPredicate.InteriorExterior] = 0;
  				else
  					relOps.m_matrix[MatrixPredicate.InteriorExterior] = -1;
  
  				relOps.m_matrix[MatrixPredicate.ExteriorInterior] = -1;
  			} else {
  				relOps.m_matrix[MatrixPredicate.InteriorInterior] = -1;
  				relOps.m_matrix[MatrixPredicate.InteriorExterior] = 0;
  				relOps.m_matrix[MatrixPredicate.ExteriorInterior] = 0;
  			}
  		}
  
  		boolean bRelation = relationCompare_(relOps.m_matrix, scl);
  		return bRelation;
  	}