Случайная функция в python для генерации случайной пары внутри круга - PullRequest
1 голос
/ 24 апреля 2020

В python как создать случайную пару точек (x, y), которая лежит внутри круга радиуса r.

В основном x и y должны удовлетворять условию x ^ 2 + y ^ 2 = r ^ 2.

Ответы [ 2 ]

2 голосов
/ 24 апреля 2020

Чтобы сгенерировать равномерно распределенную точку внутри исходного круга с радиусом r, вы можете сгенерировать два одинаковых значения t,u в диапазоне 0..1 и использовать следующую формулу :

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)
1 голос
/ 24 апреля 2020

Использование numpy для генерации более чем одной точки за раз:

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)

, что приводит к:

enter image description here

...