forked from rui-yan/LeetCode-1
-
Notifications
You must be signed in to change notification settings - Fork 0
/
generate-random-point-in-a-circle.py
61 lines (52 loc) · 1.92 KB
/
generate-random-point-in-a-circle.py
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
58
59
60
61
# Time: O(1)
# Space: O(1)
# 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.
import random
import math
class Solution(object):
def __init__(self, radius, x_center, y_center):
"""
:type radius: float
:type x_center: float
:type y_center: float
"""
self.__radius = radius
self.__x_center = x_center
self.__y_center = y_center
def randPoint(self):
"""
:rtype: List[float]
"""
r = (self.__radius) * math.sqrt(random.uniform(0, 1))
theta = (2*math.pi) * random.uniform(0, 1)
return (r*math.cos(theta) + self.__x_center,
r*math.sin(theta) + self.__y_center)
# Your Solution object will be instantiated and called as such:
# obj = Solution(radius, x_center, y_center)
# param_1 = obj.randPoint()