rustgym/leetcode/
_478_generate_random_point_in_circle.rs

1use rand::prelude::*;
2
3struct Solution {
4    radius: f64,
5    x_center: f64,
6    y_center: f64,
7    rng: ThreadRng,
8}
9
10impl Solution {
11    fn new(radius: f64, x_center: f64, y_center: f64) -> Self {
12        let rng = rand::thread_rng();
13        Solution {
14            radius,
15            x_center,
16            y_center,
17            rng,
18        }
19    }
20
21    fn rand_point(&mut self) -> Vec<f64> {
22        let mut x = self.rng.gen_range(-self.radius, self.radius);
23        let mut y = self.rng.gen_range(-self.radius, self.radius);
24        while x * x + y * y > self.radius * self.radius {
25            x = self.rng.gen_range(-self.radius, self.radius);
26            y = self.rng.gen_range(-self.radius, self.radius);
27        }
28        vec![x + self.x_center, y + self.y_center]
29    }
30}