Создать случайную точку в прямоугольнике (равномерно)
Предположим, это простая проблема.
Однако на домашней странице RANDOM_DATA я обнаружил следующее примечание:
Однако мы не добьемся равномерного распределения в простом случае.
прямоугольника с неравными сторонами [0, A] x [0, B], если мы наивно масштабируем
случайные значения (u1, u2) до (A * u1, B * u2). В этом случае ожидаемый
плотность точек широкой короткой области будет отличаться от плотности
узкий высокий регион. Отсутствие однородности наиболее очевидно, если
точки построены.
Я нахожу это довольно странным ... Я не могу понять, почему такое масштабирование повлияет на однородность.
Что мне не хватает?
Edit:
Спасибо, Патрик87 и отсутствует. Я искал теоретическую причину для утверждения. Теперь я понимаю, что причина не теоретическая, а практическая - гранулярность значений с плавающей точкой .
Если я сгенерирую две одинаковые плавающие точки между 0 и 1 (что само по себе является проблемой из-за природы представления значения с плавающей точкой. Смотрите здесь для алгоритма) - гранулярность будет ограничено.
Предположим, что между 0 и 1 существует X различных значений. При масштабировании (u1, u2) до (u1,2 * u2) мы получим X различных значений в диапазоне [0, u1] и X различных значений в диапазон [0,2 * у2]. Для однородности области у нас должно быть в два раза больше разных значений в [0,2 * u2], чем в [0, u1].
Учитывая это, позвольте мне изменить мой вопрос:
Как создать случайную точку в прямоугольнике (с равномерным распределением по области)?