rustgym/leetcode/
_478_generate_random_point_in_circle.rs1use 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}