生成圆柱体中的随机点

时间:2012-02-08 23:47:26

标签: math geometry

如果给出圆柱体的半径r和高度h,在圆柱体内产生随机3d点[x,y,z]的最佳方法或算法是什么?

4 个答案:

答案 0 :(得分:9)

如何 - 在Python伪代码中,让R为半径,H为高度:

s = random.uniform(0, 1)
theta = random.uniform(0, 2*pi)
z = random.uniform(0, H)
r = sqrt(s)*R
x = r * cos(theta)
y = r * sin(theta)
z = z # .. for symmetry :-)

简单地采用x = r * cos(angle)y = r * sin(angle)的问题是,当r很小时,即在圆的中心,r的微小变化不会改变x和y位置许多。 IOW,它导致笛卡尔坐标中的非均匀分布,并且这些点集中在圆的中心。取平方根可以纠正这个问题,至少我是否正确地完成了算术运算。

[啊,看起来像sqrt was right。]

(注意,我没想到气缸与z轴对齐,气缸中心位于(0,0,H / 2)。设定(0, 0,0)在气缸中心,在这种情况下,z应选择在-H / 2和H / 2之间,而不是0,H。)

答案 1 :(得分:2)

在围绕圆柱体的矩形实体内生成随机点;如果它在气缸内(概率pi / 4),保留它,否则丢弃它并再试一次。

答案 2 :(得分:0)

生成随机角度(可选小于2π),小于半径的随机r,以及小于高度的随机z

x = r * cos(angle)
y = r * sin(angle)

答案 3 :(得分:0)

z轴很容易:-0.5 * h <= z <= 0.5 * h

x和y等于圆圈将是:    x ^ 2 + y ^ 2&lt; = r ^ 2

Buth math很久以前对我来说: - )

相关问题