Иногда возникает задача сделать равномерное распределение точек на сфере. Например, случайные координаты на земном шаре.
Как правило программист выбирает широту и долготу равномерным распределением (обычный
rand) двух чисел в диапазоне:
широта = [0, π)
долгота = [0, 2π)
Но это
неправильно (в смысле равномерного распределения). Если так сделать, то к полюсам сферы «случайные» точки будут гуще. То есть, вероятность появления точки у полюса гораздо выше, чем у экватора.
Как сделать правильно?
Нужно выбрать два случайных числа
a и
b, равномерно распределённых в диапазоне
[0, 1).
a = rand[0, 1)
b = rand[0, 1)
После этого:
широта = arccos(2a−1)
долгота = 2πb
Это всё в радианах, конечно. В зависимости от конечного API перевести в градусы по вкусу.
Вот видео для сравнения. Разница колоссальная.