1

自 9 月以来我一直在学习 Java,但一位教授给我分配了一个科学课程的作业,用 Python 创建一个程序,该程序将使用最大值和最小值生成随机直径,以及该球体内的 15 个随机点(x, y,z)。

我需要制作一个随机数生成器来生成一个介于 0.0 和 1.0 之间的数字,这样我就可以将它插入我的公式中以找到一个随机直径。如果随机数为 RN,则为:[(RN*(max-min))+min]

起初我使用了这个随机函数:

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=sqrt(x^2+y^2) 球体:r=sqrt(x^2+y^2+z^2)

如果您能回答我问题的任何部分,我将不胜感激,非常感谢您花时间阅读本文!**顺便说一句,我正在使用嗨!自 9 月以来我一直在学习 Java,但一位教授给我分配了一个科学课程的作业,用 Python 创建一个程序,该程序将使用最大值和最小值生成随机直径,以及该球体内的 15 个随机点(x, y,z)。

我需要制作一个随机数生成器来生成一个介于 0.0 和 1.0 之间的数字,这样我就可以将它插入我的公式中以找到一个随机直径。如果随机数为 RN,则为:[(RN*(max-min))+min]

起初我使用了这个随机函数:

从随机导入* 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=sqrt(x^2+y^2) 球体:r=sqrt(x^2+y^2+z^2)

如果您能回答我问题的任何部分,我将不胜感激,非常感谢您抽出宝贵时间阅读本文!!!

**顺便说一句,我正在使用 python x,y spyder!

4

4 回答 4

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(这个是关于球体表面的点,所以可能没那么有用)

于 2013-11-21T00:32:16.763 回答
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)
于 2016-06-08T10:50:14.183 回答
0

作为对随机数生成器的回答:

RN = random.uniform(a, b)

返回一个随机整数 N,使得 a <= N <= b。

至于如何初始化 x 和 y,当您将 y = 设置为某个值时,y 将被初始化,它会自动执行。

于 2013-11-21T00:29:56.683 回答
0

您可以使用random.range

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

这将找到一个介于 -15 和 15 之间且可被 0.1 整除的数字。

于 2013-11-21T00:33:27.377 回答