478. Generate Random Point in a Circle

Description

Here

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

Wrong Distribution

也就是中心会更密集

Reason It Fails

Reason It Fails

Correct Solution

Background - Inverse Transformation Sampling

也就是当得知cumulative distribution function (CDF) - F(x)遵循某个分布的时候,如果想要求得x遵循何种分布的时候,只需要求F(X)的反函数即可

Full Proof

Proof

Solution

Polar Coordination Solution

Reference

results matching ""

    No results matching ""