生成圆柱体中的随机点

use*_*477 2 math geometry

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

DSM*_*DSM 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 :-)
Run Code Online (Sandbox Code Playgroud)

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

[啊,看起来sqrt 是对的.]

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