在X空间中的点周围均匀排列X量的东西

时间:2015-12-07 20:35:02

标签: math random geometry

如果我有X量的东西(让我们随便说300)

是否有算法可以在中心点周围均匀地排列这些东西?像100面骰子还是球体的三维网格?

我宁愿让这些东西像这样均匀分布。 enter image description here

而不是这种极地方式..

enter image description here

PS。对于那些感兴趣的人,想知道我为什么要这样做? 好吧,我正在做these以获得乐趣,在完成#7之后,我决定在Unity中用3d表示电线阵列,并观察它们以减速的方式运行。

2 个答案:

答案 0 :(得分:0)

这是一个三步法。 1a)获得比你需要的更多的积分。 1b)删除一些。 2)调整其余部分。

1a)为了获得你需要的更多点,可以选择带有镶嵌边(三角形,正方形,菱形)的任何准正多面体。通过细分来细分球面,生成更多顶点。例如,如果您使用常规二十面体,您将获得测地圆顶。 (细分为2,你得到C 60 巴基球的双重性。)制定精确的公式并不难。每个面的新顶点数在细分中是二次的。

1b)随机删除足够的分数,使你达到目标数字。

2)使用force-directed layout算法在球体上重新分布顶点。基础力图仅由基础测量中最近邻居提供。

还有其他方法可以执行步骤1),例如在任何分布中生成随机点。不过,从一个准正则数字开始有一个优势。在某些情况下,力导向算法的收敛性很差。从一些已经基本上是最优的东西开始,你将绕过你可能遇到的大部分收敛问题。

答案 1 :(得分:0)

这是一个简单的转换,将矩形[0, 2 pi] x [-1, 1]中的均匀样本映射到半径为r的球体上的均匀样本:

T(phi, z) = (r cos(phi) sqrt(1 - z^2), r sin(phi) sqrt(1 - zˆ2), r z)

此变换在球体上生成均匀样本的原因是,通过从矩形变换区域T(U)获得的任何区域U的区域不依赖于U,而是依赖于U面积为| ∂T/∂phi x ∂T/∂z |

为了在数学上证明这一点,足以验证矢量积的范数

phi

是常数(球体上的区域是此矢量积w.r.t。zr)的积分。

<强>综述

要生成在半径为(phi_1, ..., phi_n)的球体中均匀分布的随机样本,请执行以下操作:

  • 生成在[0, 2 pi]中均匀分布的随机样本(z_1, ..., z_n)
  • 生成[-1, 1]中均匀分布的随机样本(phi_j, z_k)

  • 每对T(phi_j, z_k)使用上面的公式计算{{1}}。