Minimum and maximum random numbers

Here is an example randomRange() function that captures all the options discussed so far. Pass it a “mode” String and it will return a random range that fits inside the space, or, if it overflows, is then either cropped, wrapped, split, or simply allowed to overflow. I made it for int

/**
 * RandomRanges
 * useful approaches for generating distributions of random ranges
 * in linear or circular spaces, e.g. hue colorspaces.
 * 2020-01-07 Jeremy Douglass Processing 3.4
 * see https://discourse.processing.org/t/minimum-and-maximum-random-numbers/16888/4
 */

void setup() {
  for (int i=0; i<100; i++) {
    println(randomRange(0, 360, 45, 90, "split"));
    println();
  }
}

float[] randomRange(float minVal, float maxVal, float minWide, float maxWide, String overflowMode) {
  if (overflowMode.equals("fit")) {
    float half = (random(minWide, maxWide) / 2.0);
    float center = random(minVal + half, maxVal - half);
    return new float[]{center - half, center + half};
  }
  float start = random(minVal, maxVal);
  float end = start + random(minWide, maxWide);
  if (end<=maxVal) return new float[]{start, end};
  if (overflowMode.equals("crop")) return new float[] {start, maxVal};
  if (overflowMode.equals("overflow")) return new float[] {start, end};  // redundant, added for clarity
  if (overflowMode.equals("wrap")) return new float[] {start, end%maxVal};
  if (overflowMode.equals("split")) return new float[]{minVal, end%maxVal, start, maxVal};
  return null;
}
3 Likes