Сгенерировать случайную точку внутри прямоугольника (равномерно)

Сгенерировать случайную точку внутри прямоугольника (равномерно)

Предположительно, это простая проблема.

Однако на домашней странице RANDOM_DATA я нашел следующее примечание:

Однако мы не добьемся равномерного распределения в простом случае прямоугольника неравных сторон [0, A] x [0, B], если наивно масштабировать случайные значения от (u1, u2) до (A * u1, B * u2). В этом случае ожидаемый плотность точек широкой короткой области будет отличаться от плотности точек узкая высокая область. Отсутствие однородности наиболее очевидно, если нанесены точки.

Я нашел это довольно странным ... Я не могу понять, почему такое масштабирование повлияет на однородность.

Что мне не хватает?

Редактировать:

Спасибо, Patrick87 и отсутствует Я искал теоретическую причину этого утверждения. Теперь я понимаю, что причина не теоретическая, а практическая - гранулярность значений с плавающей запятой .

Если я сгенерирую две одинаковые с плавающей запятой между 0 и 1 (что является проблемой со стороны само по себе из-за природы представления значений с плавающей запятой. Посмотрите здесь для алгоритма) - степень детализации будет ограничена.

Предположим, что есть X различных значений между 0 и 1. Масштабированием (u1 , u2) до (u1,2 * u2) у нас будет X разных значений в диапазоне [0, u1] и X разных значений в диапазоне [0,2 * u2]. Для однородности площади у нас должно быть вдвое больше разных значений в [0,2 * u2], чем в [0, u1].

Учитывая это, позвольте мне изменить свой вопрос:

Как мне создать случайную точку внутри прямоугольника (с равномерным распределением по площади)?

5
задан Lior Kogan 30 July 2011 в 16:03
поделиться