/** * Return the maximum level such that the metric is at least the given * value, or zero if there is no such level. For example, * S2.kMinWidth.GetMaxLevel(0.1) returns the maximum level such that all * cells have a minimum width of 0.1 or larger. The return value is always a * valid level. */ public int GetMaxLevel(double value) { if (value <= 0) { return(S2CellId.MaxLevel); } // This code is equivalent to computing a floating-point "level" // value and rounding down. var exponent = S2.Exp((1 << _dim) * _deriv / value); var level = Math.Max(0, Math.Min(S2CellId.MaxLevel, ((exponent - 1) >> (_dim - 1)))); // assert (level == 0 || getValue(level) >= value); // assert (level == S2CellId.MAX_LEVEL || getValue(level + 1) < value); return(level); }