How to generate random points in a circular distribution

Jack8246 picture Jack8246 · Jun 1, 2015 · Viewed 19.7k times · Source

I am wondering how i could generate random numbers that appear in a circular distribution.

I am able to generate random points in a rectangular distribution such that the points are generated within the square of (0 <= x < 1000, 0 <= y < 1000):

How would i go upon to generate the points within a circle such that:

(x−500)^2 + (y−500)^2 < 250000 ?

Answer

f43d65 picture f43d65 · Jun 1, 2015
import random
import math

# radius of the circle
circle_r = 10
# center of the circle (x, y)
circle_x = 5
circle_y = 7

# random angle
alpha = 2 * math.pi * random.random()
# random radius
r = circle_r * math.sqrt(random.random())
# calculating coordinates
x = r * math.cos(alpha) + circle_x
y = r * math.sin(alpha) + circle_y

print("Random point", (x, y))

In your example circle_x is 500 as circle_y is. circle_r is 500.

Another version of calculating radius to get uniformly distributed points, based on this answer

u = random.random() + random.random()
r = circle_r * (2 - u if u > 1 else u)