Сгенерировать случайную точку внутри прямоугольника (равномерно)
Предположительно, это простая проблема.
Однако на домашней странице 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].
Учитывая это, позвольте мне изменить свой вопрос:
Как мне создать случайную точку внутри прямоугольника (с равномерным распределением по площади)?