Другие ответы дают своего рода случайную точку внутри круга, но они не распределены равномерно.Области вблизи центра будут иметь более высокую концентрацию точек на единицу площади, чем области вблизи края.
Чтобы получить равномерное распределение, вы можете:
(a) Найти случайную точку вквадрат оси вокруг круга.
x = (Math.random() * 2 - 1) * radius;
y = (Math.random() * 2 - 1) * radius;
Проверьте, действительно ли он находится в круге (x * x + y * y <= r * r
).Повторяйте, пока не найдете правильную точку.
(b) Выполните небольшое математическое преобразование, чтобы получить надлежащим образом распределенные расстояние и угол.
uniform_random = P(dist < r) = (pi r^2) / (pi radius^2) = r^2 / radius^2
r = radius * sqrt(uniform_random)
var r = radius * sqrt(Math.random());
var theta = 2 * Math.PI * Math.random();
var x = r * Math.cos(theta);
var y = r * Math.sin(theta);