Given any particular rectangle (x1,y1)-(x2,y2), how can I generate a random point on its perimeter?
I’ve come up with a few approaches, but it seems like there ought to be a pretty canonical way to do it.
First, I thought I’d generate a random point within the rectangle and clamp it to the closest side, but the distribution didn’t seem uniform (points almost never fell on the shorter sides). Second, I picked a side at random and then chose a random point on that side. The code was kind of clunky and it wasn’t uniform either – but in the exact opposite way (short sides had the same chance of getting points as long sides). Finally, I’ve been thinking about “unfolding” the rectangle into a single line and picking a random point on the line. I think that would generate a uniform distribution, but I thought I’d ask here before embarking down that road.
Your last approach is what I would have recommended just from reading your title. Go with that. Your second approach (pick a side at random) would work if you picked a side with probability proportional to the side length.