2013-11-21 158 views
1

自9月份以來,我一直在學習Java,但已被教授授予科學課程作業,以創建一個使用最大值和最小值生成隨機直徑的Python程序,以及15這個球體內的隨機點(x,y,z)。Python中的隨機生成器函數

我需要做一個隨機數生成器,生成一個介於0.0和1.0之間的數字,這樣我就可以將它插入到我的公式中以找到一個隨機直徑。如果隨機數是RN,這將是:[(RN *(最大值 - 最小值))+分鐘]

起初我用這個隨機函數:

from random import* 
RN=random(): 

的問題是,該隨機函數是[0.0,1.0)。換句話說,它不包含1.0。 如何創建一個包含1.0的函數?

另外,如果你不介意,你能幫我找到y和z座標嗎?我知道如何找到x。

y值的公式是y = +或 - sqrt(r^2-x^2)(也是隨機生成的)。 我會得到x值,它是隨機函數[0.0-1.0]的結果,以及半徑爲我的一半的半徑。我是一個Python初學者,我如何初始化我的x和y並將上面的公式放入?

用於Z的公式是類似的,Z = +或 - 的sqrt(-x^2-Y^2 + R^2)

這些方法使用了式(被隨機生成以及)圈: 半徑:R =開方(X^2 + Y^2) 球:R =開方(X^2 + Y^2 + Z^2)

我將是令人難以置信的感激,如果你能回答任何我的問題的一部分,非常感謝您花時間閱讀此!順便說一下,我是usinHi!自從9月份以來,我一直在學習Java,但是已經被教授授予了一門科學課程的任務,用Python創建一個程序,該程序將使用最大值和最小值生成一個隨機直徑,並在該範圍內包含15個隨機點(x, y,z)。

我需要做一個隨機數生成器,生成一個介於0.0和1.0之間的數字,這樣我就可以將它插入到我的公式中以找到一個隨機直徑。如果隨機數是RN,這將是:[(RN *(最大值 - 最小值))+分鐘]

起初我用這個隨機函數:

從隨機導入* RN =隨機() :

問題是,這個隨機函數是[0.0,1.0)。換句話說,它不包含1.0。 如何創建一個包含1.0的函數?

另外,如果你不介意,你能幫我找到y和z座標嗎?我知道如何找到x。

y值的公式是y = +或 - sqrt(r^2-x^2)(也是隨機生成的)。 我會得到x值,它是隨機函數[0.0-1.0]的結果,以及半徑爲我的一半的半徑。我是一個Python初學者,我如何初始化我的x和y並將上面的公式放入?

用於Z的公式是類似的,Z = +或 - 的sqrt(-x^2-Y^2 + R^2)

這些方法使用了式(被隨機生成以及)圈: 半徑:R =開方(X^2 + Y^2) 球:R =開方(X^2 + Y^2 + Z^2)

我將是令人難以置信的感激,如果你能回答任何我的問題的一部分,非常感謝您花時間閱讀本文!

**順便說一句,我正在使用python x,y spyder!

回答

0

作爲答案給隨機數發生器:

RN = random.uniform(a, b) 

返回一個隨機整數N,從而使得< = N < = B。

至於如何初始化x和y,當您將y =設置爲某項時,y將被初始化,它會自動執行。

2

random.uniform會給你一個給定的最小值和最大值之間的均勻分佈的隨機數。

只生成隨機點,並檢查它們是否在球體內。如果不是,丟棄它們並重試。

import math 
import random 

def generate_points(n_points, min_diameter=0, max_diameter=1): 
    diameter = random.uniform(min_diameter, max_diameter) 
    radius = diameter/2 
    count = 0 
    while count < n_points: 
     x, y, z = [random.uniform(-radius, radius) for _ in range(3)] 
     distance = math.sqrt(x * x + y * y + z * z) 
     if distance <= radius: 
      yield (x, y, z) 
      count += 1 

for x, y, z in generate_points(10): 
    print x, y, z 

注意:這可能會產生偏差。 (我不確定,實際上可能沒問題。)另一種方法可能是使用極座標,選擇兩個隨機角度和一個隨機半徑(從中心偏移)。

下面是這種方法的數學:

theta = random.uniform(0, 2 * math.pi) 
phi = random.uniform(-math.pi/2, math.pi/2) 
x = r * cos(theta) * cos(phi) 
y = r * sin(phi) 
z = r * sin(theta) * cos(phi) 

在這裏看到更多的分佈:

https://math.stackexchange.com/questions/87230/picking-random-points-in-the-volume-of-sphere-with-uniform-probability

http://mathworld.wolfram.com/SpherePointPicking.html(這一個是關於球體的表面上的點,所以可能沒有那麼有用)

0

您可以使用random.range

random.randrange(-15,15,.1) 

這將找到一個-15和15之間的數字,可以被0.1整除。

+1

'random.randrange'方能有整數參數。這樣做的更好方法(在我看來)是'random.randrange(-150,150,1)/ 10'。 –

1

我用這一個隨機數發生器和它的作品,我不知道這是否是你正在尋找正確的,但我希望它能幫助

import random 

maths_operator_list=['+','-','*'] 
maths_operator = random.choice(maths_operator_list) 
number_one = random.randint(0,20) 
number_two = random.randint(0,20) 
correct_answer = 0 

print(str(number_one), str(maths_operator), number_two) 

if maths_operator == '+': 
    correct_answer = number_one + number_two 
elif maths_operator == '-': 
    correct_answer = number_one - number_two 
elif maths_operator == '*': 
    correct_answer = number_one * number_two 

print(correct_answer)