478. 在圆内随机生成点

exiaohu 于 2022-06-05 发布

题目链接:478. 在圆内随机生成点

这个题有一个点,在随机采样半径时,不能在 $[0, r]$ 的范围内采样,而得在 $[0, r^2]$ 的范围内采样,然后开方。这两种采样方式求得的点的分布不同,题目要求生成点在面积上分布均匀。

import math
from random import uniform
from typing import List


class Solution:

    def __init__(self, radius: float, x_center: float, y_center: float):
        self.radius = radius
        self.center = (x_center, y_center)

    def randPoint(self) -> List[float]:
        _r, _a = uniform(0, self.radius ** 2) ** 0.5, uniform(0, 2 * math.pi)
        _x, _y = _r * math.cos(_a), _r * math.sin(_a)
        xc, yc = self.center

        return [xc + _x, yc + _y]