自9月以来,我一直在学习Java,但是一位教授给我分配了科学课程的作业,以用Python创建程序,该程序将使用最大值和最小值以及该球体内的15个随机点生成一个随机直径(x, y,z)。
我需要制作一个随机数生成器,以生成0.0到1.0之间的数字,以便将其插入公式中以查找随机直径。如果随机数为RN,则为:[(RN *(max-min))+ min]
首先,我使用了这个随机函数:
fromrandomimport*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!
解决方案
random.uniform会在给定的最大值和最小值之间给您一个均匀分布的随机数。
只需生成随机点,然后检查它们是否在球体内即可。如果不是,请将其丢弃,然后重试。
importmathimportrandomdefgenerate_points(n_points,min_diameter=0,max_diameter=1):diameter=random.uniform(min_diameter,max_diameter)radius=diameter/2count=0whilecount
注意:这可能会偏向生成哪些点。(我不确定,实际上可能还可以。)另一种方法可能是使用极坐标,选择两个随机角度和一个随机半径(与中心的偏移量)。
这是该方法的数学公式:
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)
有关分发的更多信息,请参见此处: