Re:Random(Random(Random(Random())))
by acjohnson55 on Monday May 15, 2023 @04:59PM
(#35954396)
The reason it's counterintuitive is because the randomly chosen distance variable is 1 minus the nested randoms. Each random call becomes the upper bound of future random calls, so the more times you nest it, the closer to zero you're likely to be. Subtracting that from one puts you close to the unit circle.
right, if the points are distributed in a square then the distribution looks more like what one would expect:
(i am to lazy to register to make a fork, here is the code change):
replace:
let a = random(Math.PI*2);
let r = d * (1 - random());
point(cos(a)*r, sin(a)*r);
with: let a = random(d);
let r = d \* (1 - random());
point(a, r);
in every blockYup, that's way more intuitive, and removes the artifact of the first circle looking like the points are clustered around the middle:
I forked it: https://openprocessing.org/sketch/1929579
I forked it with similar idea:
https://openprocessing.org/sketch/1929687
I think this isn't so intuitive because the polar coordinates already imply greater density near center (which could be corrected with a suitable map).