-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGenerateRandomPointinaCircle.java
More file actions
58 lines (53 loc) · 2.14 KB
/
GenerateRandomPointinaCircle.java
File metadata and controls
58 lines (53 loc) · 2.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package medium;
/**
* ClassName: GenerateRandomPointinaCircle.java
* Author: chenyiAlone
* Create Time: 2019/11/15 10:41
* Description: No.478 Generate Random Point in a Circle
*
* Given the radius and x-y positions of the center of a circle, write a function randPoint which generates a uniform random point in the circle.
*
* Note:
*
* input and output values are in floating-point.
* radius and x-y position of the center of the circle is passed into the class constructor.
* a point on the circumference of the circle is considered to be in the circle.
* randPoint returns a size 2 array containing x-position and y-position of the random point, in that order.
* Example 1:
*
* Input:
* ["Solution","randPoint","randPoint","randPoint"]
* [[1,0,0],[],[],[]]
* Output: [null,[-0.72939,-0.65505],[-0.78502,-0.28626],[-0.83119,-0.19803]]
* Example 2:
*
* Input:
* ["Solution","randPoint","randPoint","randPoint"]
* [[10,5,-7.5],[],[],[]]
* Output: [null,[11.52438,-8.33273],[2.46992,-16.21705],[11.13430,-12.42337]]
* Explanation of Input Syntax:
*
* The input is two lists: the subroutines called and their arguments. Solution's constructor has three arguments, the radius, x-position of the center, and y-position of the center of the circle. randPoint has no arguments. Arguments are always wrapped with a list, even if there aren't any.
*
*/
public class GenerateRandomPointinaCircle {
private double x, y, radius;
/**
* Your Solution object will be instantiated and called as such:
* Solution obj = new Solution(radius, x_center, y_center);
* double[] param_1 = obj.randPoint();
*/
public GenerateRandomPointinaCircle(double radius, double x_center, double y_center) {
this.x = x_center;
this.y = y_center;
this.radius = radius;
}
public double[] randPoint() {
double[] ret = new double[2];
ret[0] = x - radius + Math.random() * (2 * radius);
ret[1] = y - radius + Math.random() * (2 * radius);
if (Math.pow(ret[0] - x, 2) + Math.pow(ret[1] - y, 2) > Math.pow(radius, 2))
return randPoint();
return ret;
}
}