沿圆柱表面生成非均匀分布的 3D 点

Generating 3D points along a cylinder surface with a non-uniform distribution

我正在尝试沿着具有 y 上轴的圆柱体的曲面随机生成点。在沿 2D 圆创建点的 SO 问题之后,我有

def point(h, k, r):
    theta = random.random() * 2 * pi
    global x
    global y
    x = h + cos(theta) * r
    y = k + sin(theta) * r

给定圆柱体的 (h,k) 原点 (0, -21.56462) 和 r(半径 = 7.625)。然后我通过在我的范围 (-2.35, 12.31) 内生成一个 z 点使这些点成为 3D。然而,这让我走到了一半,因为最终结果是一个圆柱体,但顺时针旋转了 90 度。

Image of generated cylinder

我可以使用什么公式来生成正确方向的点?不幸的是,我对三角学不是很熟悉。提前致谢!

解决方案:

def point(h, k, r):
    theta = random.random() * 2 * pi
    global x
    global z
    x = h + cos(theta) * r
    z = k + sin(theta) * r

新的 (h,k) 原点现在是 (x,z),其中 x 和 z 是圆柱体中心的坐标,y 是在其适当的高度范围内随机生成的。向量仍然是 (x,y,z).

Updated generated cylinder

解决方案:

(感谢 David Huculak)

def point(h, k, r):
    theta = random.random() * 2 * pi
    global x
    global z
    x = h + cos(theta) * r
    z = k + sin(theta) * r

新的 (h,k) 原点现在是 (x,z),其中 x 和 z 是圆柱体中心的坐标,y 是在其适当的高度范围内随机生成的。向量仍然是 (x,y,z).

Updated Generated cylinder