-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Create 15GenerateRandompointinacircle.cpp
- Loading branch information
1 parent
a498461
commit 2a4c4dd
Showing
1 changed file
with
51 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
// 478. Generate Random Point in a Circle | ||
// Given the radius and the position of the center of a circle, implement the function randPoint which generates a uniform random point inside the circle. | ||
|
||
// Implement the Solution class: | ||
|
||
// Solution(double radius, double x_center, double y_center) initializes the object with the radius of the circle radius and the position of the center (x_center, y_center). | ||
// randPoint() returns a random point inside the circle. A point on the circumference of the circle is considered to be in the circle. The answer is returned as an array [x, y]. | ||
|
||
|
||
// Example 1: | ||
|
||
// Input | ||
// ["Solution", "randPoint", "randPoint", "randPoint"] | ||
// [[1.0, 0.0, 0.0], [], [], []] | ||
// Output | ||
// [null, [-0.02493, -0.38077], [0.82314, 0.38945], [0.36572, 0.17248]] | ||
|
||
// Explanation | ||
// Solution solution = new Solution(1.0, 0.0, 0.0); | ||
// solution.randPoint(); // return [-0.02493, -0.38077] | ||
// solution.randPoint(); // return [0.82314, 0.38945] | ||
// solution.randPoint(); // return [0.36572, 0.17248] | ||
|
||
|
||
class Solution { | ||
public: | ||
double r,x,y; | ||
Solution(double radius, double x_center, double y_center) { | ||
r = radius; | ||
x = x_center; | ||
y = y_center; | ||
} | ||
|
||
vector<double> randPoint() { | ||
double x_r = ((double)rand()/RAND_MAX * (2*r)) + (x-r); | ||
double y_r = ((double)rand()/RAND_MAX * (2*r)) + (y-r); | ||
|
||
while(solve(x_r,y_r,x,y)>=r*r) | ||
{ | ||
x_r = ((double)rand()/RAND_MAX * (2*r)) + (x-r); | ||
y_r = ((double)rand()/RAND_MAX * (2*r)) + (y-r); | ||
} | ||
|
||
return {x_r,y_r}; | ||
} | ||
|
||
double solve(double x_r,double y_r,double x,double y) | ||
{ | ||
return (x-x_r)*(x-x_r) + (y-y_r)*(y-y_r); | ||
} | ||
}; |