478. Generate Random Point in a Circle
Description
Intuition
这道题蕴含了很多高数的姿势。
Solution 1 Rejection Sampling
题目的本意,就是让你产生一个外接正方形,然后不断扔点,直到产生的点在在圆内
Solution 2 Polar Coordination
Pitfall
很容易联想到使用极坐标来搞事,得到以下代码
double a = random() * 2 * PI
double r = R * sqrt(random())
// If you need it in Cartesian coordinates
double x = r * cos(a)
double y = r * sin(a)
However, the distribution is not uniformly distributed
也就是中心会更密集
Reason It Fails
Correct Solution
Background - Inverse Transformation Sampling
也就是当得知cumulative distribution function (CDF) - F(x)
遵循某个分布的时候,如果想要求得x遵循何种分布的时候,只需要求F(X)
的反函数即可