我有一个函数,可以在一个特定半径的球体内创建一个均匀的随机点:
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
任何帮助或例子将不胜感激!!在
你真的想得太多了。用2D演示更简单,逻辑是一样的:
在上图中,我们有一个以(0,0)为中心的圆,一个位于(0,1)的点。在
现在,让我们将圆置于(1,1)的中心,并将该点移动到相同的相对位置:
圆的新中心是(1,1),点现在位于(1,2)。要实现这种转变,您需要做的就是:
就这么简单!在
现在,
^{pr2}$numpy
内置了使这一点更简单的功能,因为您可以简单地添加numpy数组。因此,如果你有了新的中心和初始点,你可以这样计算新的点:这很容易转化为三维曲面:
这里有一个以(0,0,0)为中心的球体,一个点在(0,0,10)。我们可以使用相同的逻辑将这个圆移动到(5,5,5)的中心,同时点仍然处于相同的相对位置:
相关问题 更多 >
编程相关推荐