给定圆的半径和圆心的位置,实现函数 randPoint ,在圆中产生均匀随机点。
这道题的核心是均匀,如果使用极坐标取随机的角度和半径,就会导致半径小的取点比较密集,可以绘制看一下。
所以本题是拒绝采样(我这么做了之后才知道还有个专业术语)
class Solution:
def __init__(self, radius: float, x_center: float, y_center: float):
self.x_center = x_center
self.y_center = y_center
self.radius = radius
def randPoint(self) -> List[float]:
left_down_x = self.x_center - self.radius
left_down_y = self.y_center - self.radius
ran1 = random.randint(0, 3*10**4)/(3*10**4)
ran2 = random.randint(0, 3*10**4)/(3*10**4)
x = left_down_x + ran1 * 2 * self.radius
y = left_down_y + ran2 * 2 * self.radius
while (x - self.x_center) ** 2 + (y - self.y_center) ** 2 > self.radius ** 2:
return self.randPoint()
return [x, y]
# Your Solution object will be instantiated and called as such:
# obj = Solution(radius, x_center, y_center)
# param_1 = obj.randPoint()