Kaustubh Dwivedi
Kaustubh Dwivedi

Reputation: 436

Random function in python to generate random pair inside a circle

In python how to generate a random pair of points (x,y) that lies inside a circle of radius r.

Basically the x and y should satisfy the condition x^2 + y^2 = r^2.

Upvotes: 2

Views: 1481

Answers (2)

FBruzzesi
FBruzzesi

Reputation: 6485

Using numpy to generate more than one point at a time:

import numpy as np 
import matplotlib.pyplot as plt 

n_samples = 1000

r = 4
# make a simple unit circle 
theta = np.linspace(0, 2*np.pi, n_samples)
a, b = r * np.cos(theta), r * np.sin(theta)

t = np.random.uniform(0, 1, size=n_samples)
u = np.random.uniform(0, 1, size=n_samples)

x = r*np.sqrt(t) * np.cos(2*np.pi*u)
y = r*np.sqrt(t) * np.sin(2*np.pi*u)

# Plotting
plt.figure(figsize=(7,7))
plt.plot(a, b, linestyle='-', linewidth=2, label='Circle', color='red')
plt.scatter(x, y, marker='o',  label='Samples')
plt.ylim([-r*1.5,r*1.5])
plt.xlim([-r*1.5,r*1.5])
plt.grid()
plt.legend(loc='upper right')
plt.show(block=True)

which results in:

enter image description here

Upvotes: 2

MBo
MBo

Reputation: 80187

To generate uniformly distributed point inside origin-centered circle of radius r, you can generate two uniform values t,u in range 0..1 and use the next formula:

import math, random
r = 4
t = random.random()
u = random.random()
x = r * math.sqrt(t) * math.cos(2 * math.pi * u)
y = r * math.sqrt(t) * math.sin(2 * math.pi * u)
print (x,y)

Upvotes: 3

Related Questions