【发布时间】:2018-12-04 11:28:21
【问题描述】:
我有一个函数可以在特定半径的球体内创建一个均匀的随机点:
radius = 5
r = radius * ( numpy.random.random()**(1./3.) )
phi = numpy.random.uniform(0,2*numpy.pi)
costheta = numpy.random.uniform(-1,1)
theta = numpy.arccos(costheta)
x = numpy.sin(theta) * numpy.cos(phi)
y = numpy.sin(theta) * numpy.sin(phi)
z = numpy.cos(theta)
point = numpy.array([x, y, z]) * r`
但是,我试图弄清楚如何让生成的点位于空间中特定点周围的球体内,而不是当前在 周围生成的位置>0,0,0。我根本不精通数学,所以我不知道该怎么做。 有很多关于如何在特定半径的球体中生成随机点的示例(即Generate a random point within a circle (uniformly),但我在 python 中没有看到任何说明如何在用户指定点周围的半径内执行此操作的示例(或者我只是误解了使用的数学......)。
这里提出/回答了一个问题 (generate a random cluster of points around a given point python),但这并没有真正帮助,还有其他一些类似的问题,但它们是用 Java 或 C# 编写的(即Randomly generate clustered points given a center coordinate in 3D)。
我画了一张我现在拥有的东西(左侧)和我正在尝试做的事情(右侧)的简单图。differentOrigin
任何帮助或示例将不胜感激!
【问题讨论】:
-
对于非 0,0,0 的任意点,行为是相同的。你只需要一点加法/减法
-
point = numpy.array([x, y, z]) * r + specific_point其中specific_point = [x_0, y_0, z_0]