如果给出圆柱体的半径r和高度h,在圆柱体内产生随机3d点[x,y,z]的最佳方法或算法是什么?
答案 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很久以前对我来说: - )